Hibernate-如何使关联变得(全局)迫切?
是否有一些简单的方法可以获取大对象图的所有关联,而不必“左连接获取”所有关联?我不能告诉Hibernate在默认情况下获取关联吗?即使可能有一个全局的Hibernate-如何使关联变得(全局)迫切?,hibernate,Hibernate,是否有一些简单的方法可以获取大对象图的所有关联,而不必“左连接获取”所有关联?我不能告诉Hibernate在默认情况下获取关联吗?即使可能有一个全局的lazy=false(google没有显示它,但它可能是可能的),您也确实不想这样做。是否确实要为每个请求加载整个数据库或重要对象图?请记住,按照hibernate的工作方式,它需要实例化图中的每个对象。这将是缓慢和内存密集型的,并可能会崩溃你的应用程序,因为你的数据增长 如果必须加载大量数据,请使用自定义hql查询,并从表中提取所需的字段。避免对
lazy=false
(google没有显示它,但它可能是可能的),您也确实不想这样做。是否确实要为每个请求加载整个数据库或重要对象图?请记住,按照hibernate的工作方式,它需要实例化图中的每个对象。这将是缓慢和内存密集型的,并可能会崩溃你的应用程序,因为你的数据增长
如果必须加载大量数据,请使用自定义hql查询,并从表中提取所需的字段。避免对象实例化。此外,您还可以让db通过使用;i、 e.让db不断动态更新虚拟表,因此您只需要从web应用透视图中选择一个表
另一个选择是重新设计您的交互,这样您就不必在一开始就这样做。我也不知道有全局切换。不过,使用注释控制抓取是可行的
@Proxy(lazy = false)
public class SomeBean {
...
@ManyToOne(fetch = FetchType.EAGER)
private OtherBean otherbean;
...
}
在HQL中,您需要指定希望急切地获取关联 无论如何,正如上面所述的@hvgotcodes,试图快速获取所有内容会导致性能问题。在尝试这样做时,您很可能会发现自己获取了数据库的很大一部分
我建议您阅读hibernate手册中的详细信息。您可以将其放入hibernate映射标记中:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false">
但是你不会满意的
顺便说一下:即时加载和加入获取是不同的概念!两者都不是避免任何问题的灵丹妙药
- 通常,使用急加载可能会出现严重的N+1问题
- 通常,使用连接获取可能会导致结果的大量乘法
请参阅Ayende Rahien的相关博客文章: