Hibernate中的延迟加载和集合

3

如果我想从一个延迟加载的集合中获取单个或少量项(例如第1个、第3个和第5个),Hibernate是否会从数据库中提取所有项,然后返回我请求的那些,还是只会从数据库中检索特定的请求项?

4个回答

9

请查看extra-lazy collections

但如果您需要特定的项目,请直接查询它们,而不是从集合中获取。


那么,通常情况下,它只会从数据库中检索整个集合,对吧? - user802232

6

1
In hibernate, pagination doesn't work well when eagerly fetching a collection. 

在这种情况下,Hibernate会获取所有表数据而没有进行分页,并在JVM内部应用内存分页。当出现此情况时,将打印此警告: {code:java} [/api] WARN o.h.h.i.ast.QueryTranslatorImpl - HHH000104: firstResult/maxResults specified with collection fetch; applying in memory! {code}
我们应该至少提出一个拉取请求,以便在这些情况下可选择地抛出RuntimeException。

0

我认为你有几种可能性。你可以将结果与起始元素绑定,以获取一定数量的元素(就像分页一样)。你也可以编写适当的SQL查询,而不是使用HQL或criteria。如果你使用extra lazy collection,Hibernate可能会为每次从列表中获取元素执行一个查询。因此,每个解决方案的有效性严格取决于你的应用程序和数据库中的数据量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接