Hibernate -如何有效地获取一个大的对象图



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

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

我首先想到的是使用fetch连接,但是有这么多的关联,这可能会成为一个真正的痛苦。有没有更好的解决办法?

读取连接和缓存(或两者的组合)基本上是提高性能的唯一方法;它们是否适合你,在很大程度上取决于你的实体是什么样子的,以及你想要做什么。

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

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

总而言之,如果你提到的45个额外的查询是每个实体在你的列表中,你可能不得不做一个权衡和缓存/获取一些依赖,让其他通过后续选择加载。

最新更新