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

时间:2010-02-08 15:58:42

标签: hibernate

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

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

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

编辑:我们使用Hibernate 3.3.2

3 个答案:

答案 0 :(得分:26)

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

criteria.setFetchMode("propertyName", FetchMode.SELECT); 

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

Hibernate代码:

public static final FetchMode LAZY = SELECT;

答案 1 :(得分:4)

如果有人偶然发现此事(如我),请参阅this。看来这是一个Hibernate文档错误, FetchMode.SELECT确实会导致延迟加载

答案 2 :(得分:-6)

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

你的似乎是一种不寻常的情况,Hibernate没有涵盖。典型的用例恰恰相反:默认情况下使用延迟提取,并有选择地为有正当理由的查询启用热切提取。