Hibernate - 如何让关联渴望(全球)?

hel*_*hod 2 hibernate

是否有一些简单的方法来获取大对象图的所有关联而无需"左连接提取"所有这些关联?我不能告诉Hibernate默认获取关联的关联吗?

hvg*_*des 6

即使有可能有全局lazy=false(谷歌没有显示它,但它可能),你真的不想这样做.您是否真的想为每个请求加载整个数据库或重要的对象图?请记住,hibernate的工作方式,它需要实例化图中的每个对象.它将变得缓慢且占用大量内存,并且随着数据的增长可能会使您的应用程序崩溃.

如果必须加载大量数据,请使用自定义hql查询,并从表中提取所需的字段.避免对象实例化.此外,您可以通过使用视图让数据库执行大量繁重工作; 即让db持续动态更新虚拟表,因此您只需从web-apps角度选择一个表.

另一种选择是重新设计您的交互,因此您不必首先执行此操作.


Ste*_*ger 5

你可以将它放入hibernate-mapping标签:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false">
Run Code Online (Sandbox Code Playgroud)

但你不会对此感到满意.

顺便说一句:渴望加载和加入fetch是不同的概念!两者都不是银子弹,以避免任何问题.

  • 通常使用急切加载可能会导致严重的N + 1问题
  • 通常使用连接提取可能会导致结果的大量增加.

在合适的地方使用 - 如果有疑问则避免两者.


请参阅Ayende Rahien的相关博客文章: