我正在针对域模型编写查询,其中(无论出于何种原因)使用lazy =“false”映射一对多关联。在我的特定查询中,我宁愿懒惰地获取该集合,因为我不关心它的内容。如何为我的特定查询重新启用懒惰?这有可能吗?
到目前为止,我查看了Criteria.setFetchMode
,但FetchMode.LAZY
仅仅是FetchMode.SELECT
的弃用别名......
更改映射可能是理想的,但我宁愿不冒风险影响现有查询。
编辑:我们使用Hibernate 3.3.2
答案 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没有涵盖。典型的用例恰恰相反:默认情况下使用延迟提取,并有选择地为有正当理由的查询启用热切提取。