如果我想从一个延迟加载的集合中获取单个或少量项(例如第1个、第3个和第5个),Hibernate是否会从数据库中提取所有项,然后返回我请求的那些,还是只会从数据库中检索特定的请求项?
如果我想从一个延迟加载的集合中获取单个或少量项(例如第1个、第3个和第5个),Hibernate是否会从数据库中提取所有项,然后返回我请求的那些,还是只会从数据库中检索特定的请求项?
但如果您需要特定的项目,请直接查询它们,而不是从集合中获取。
除了extra lazy以外,还有一种选择是使用集合过滤器。
http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#objectstate-filtering这基本上是基于集合内容的查询,其中包括分页的可能性。
Collection tenKittens = session.createFilter(
mother.getKittens(), "")
.setFirstResult(0).setMaxResults(10)
.list();
In hibernate, pagination doesn't work well when eagerly fetching a collection.
我认为你有几种可能性。你可以将结果与起始元素绑定,以获取一定数量的元素(就像分页一样)。你也可以编写适当的SQL查询,而不是使用HQL或criteria。如果你使用extra lazy collection,Hibernate可能会为每次从列表中获取元素执行一个查询。因此,每个解决方案的有效性严格取决于你的应用程序和数据库中的数据量。