是否有一些简单的方法来获取大对象图的所有关联而无需“左连接获取”所有这些?我不能告诉Hibernate默认获取关联的关联吗?
答案 0 :(得分:6)
即使有可能有全局lazy=false
(谷歌没有显示它,但可能有可能),你真的不想这样做。您是否真的想为每个请求加载整个数据库或重要的对象图?请记住,hibernate的工作方式,它需要实例化图中的每个对象。它将变得缓慢且占用大量内存,并且随着数据的增长可能会使您的应用程序崩溃。
如果必须加载大量数据,请使用自定义hql查询,并从表中提取所需的字段。避免对象实例化。此外,您可以使用view让数据库执行大量繁重工作;即让db持续动态更新虚拟表,因此您只需从web-apps角度选择一个表。
另一个选择是重新设计您的互动,这样您就不必首先这样做了。
答案 1 :(得分:5)
你可以将它放入hibernate-mapping标签:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false">
但你不会对它感到满意。
顺便说一句:渴望加载和加入获取是不同的概念!两者都不是银子弹,以避免任何问题。
在适当的地方使用 - 如果有疑问则避免两者。
请参阅Ayende Rahien撰写的相关博文:
答案 2 :(得分:1)
我也不知道全局转换。但是,使用注释控制提取仍然有效。
@Proxy(lazy = false)
public class SomeBean {
...
@ManyToOne(fetch = FetchType.EAGER)
private OtherBean otherbean;
...
}
答案 3 :(得分:1)
在HQL中,您需要指定您想要急切地获取关联。
无论如何,正如@hvgotcodes所述,试图快速获取所有内容会导致性能问题。在尝试这样做时,您很可能会发现自己正在获取大部分数据库。
我建议您阅读hibernate手册中的Fetching Strategies以获取详细信息。