Hibernate:在Criteria API中启用延迟抓取

mer*_*ike 18 hibernate

我正在针对域模型编写查询,其中(无论出于何种原因)一对多关联与lazy ="false"映射.在我的特定查询中,我宁愿懒惰地获取该集合,因为我不关心它的内容.如何为我的特定查询重新启用懒惰?这有可能吗?

到目前为止,我看了一下Criteria.setFetchMode,但FetchMode.LAZY仅仅是一个被弃用的别名FetchMode.SELECT......

更改映射可能是理想的,但我宁愿不冒风险影响现有查询.

编辑:我们使用Hibernate 3.3.2

che*_*ara 26

接受的答案是错误的.Hibernate允许您在标准中懒惰获取默认情况下在映射中急切的东西.只需致电

criteria.setFetchMode("propertyName", FetchMode.SELECT); 
Run Code Online (Sandbox Code Playgroud)

我试过这个并且有效.FetchMode.LAZY在源代码中被标记为已弃用,它所做的只是指向FetchMode.SELECT

Hibernate代码:

public static final FetchMode LAZY = SELECT;
Run Code Online (Sandbox Code Playgroud)

  • @Che javara - 试过这个并不适合我.我正在使用Hibernate 3.6.10.搜索了代码的使用,没有一个看起来是Hibernate跳过加载集合/关联的情况.对于哪里有什么建议? (2认同)

Pét*_*rök -6

我自己不是专家,但是浏览 Hibernate 书籍并咨询同事并没有给我任何暗示这是可能的,相反。

你的情况似乎是一种不寻常的情况,Hibernate 没有涵盖。典型的用例是相反的:默认使用延迟获取,并有选择地在合理的情况下对查询启用急切获取。