Hibernate-如何高效地获取大对象图?

Hibernate-如何高效地获取大对象图?,hibernate,Hibernate,对于项目,我必须从数据库中读取对象列表。对象类型是由许多关联对象组成的大对象图。当我执行select查询以获取数据库中所有对象的列表时,Hibernate不仅执行1个查询,还执行45个其他查询。不过,这些对象似乎是延迟加载的 但我需要的是有效地加载整个对象的列表。最好的方法是什么 我第一次想到使用fetch连接,但是有这么多的关联,这可能会成为一个真正的痛苦。有更好的解决方案吗?获取连接和缓存(或两者的组合)基本上是提高性能的唯一方法;他们是否会为你工作在很大程度上取决于你的实体看起来像什么以及

对于项目,我必须从数据库中读取对象列表。对象类型是由许多关联对象组成的大对象图。当我执行select查询以获取数据库中所有对象的列表时,Hibernate不仅执行1个查询,还执行45个其他查询。不过,这些对象似乎是延迟加载的

但我需要的是有效地加载整个对象的列表。最好的方法是什么

我第一次想到使用fetch连接,但是有这么多的关联,这可能会成为一个真正的痛苦。有更好的解决方案吗?

获取连接和缓存(或两者的组合)基本上是提高性能的唯一方法;他们是否会为你工作在很大程度上取决于你的实体看起来像什么以及你想做什么

缓存对于实例数量有限(理想情况下是不可变的)的多对一依赖关系很有帮助,例如查找引用。Fetch连接可用于所有其他一对一和多对一连接;尝试获取嵌套集合很快就会失控

在某些情况下适用的另一个技巧是在运行查询之前将(某些)惰性依赖实体(当然,如果您事先知道它们是什么)预加载到会话中。这样,您就不必在不可行的情况下处理二级缓存的性能/内存问题


综上所述,如果您提到的45个额外查询是列表中的每个实体,那么您可能需要在某个地方进行权衡,缓存/获取一些依赖项,让其他依赖项通过后续选择加载。

您需要加载整个对象图吗,或者只是根级别对象的一些属性?整个对象图。