Hibernate:在标准API中启用延迟抓取

Hibernate:在标准API中启用延迟抓取,hibernate,Hibernate,我正在针对一个域模型编写一个查询,其中(出于任何原因)一对多关联映射为lazy=“false”。在我的特定查询中,我宁愿懒散地获取该集合,因为我不关心它的内容。如何为我的特定查询重新启用惰性?这可能吗 到目前为止,我查看了Criteria.setFetchMode,但是FetchMode.LAZY只是FetchMode.SELECT的一个不推荐的别名 更改映射可能是理想的,但我不想冒影响现有查询的风险 编辑:我们使用Hibernate 3.3.2我自己不是专家,但浏览Hibernate书籍并与同

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

到目前为止,我查看了
Criteria.setFetchMode
,但是
FetchMode.LAZY
只是
FetchMode.SELECT的一个不推荐的别名

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


编辑:我们使用Hibernate 3.3.2

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


你的情况似乎不寻常,没有冬眠。典型的使用案例正好相反:默认情况下使用延迟抓取,并在合理的情况下有选择地为查询启用即时抓取。

如果有人(比如我)偶然发现了这一点,请参阅。这似乎是一个Hibernate文档错误,并且
FetchMode。SELECT
确实会导致延迟加载

接受的答案是错误的。Hibernate允许您在映射中延迟获取默认情况下需要的内容。就叫

criteria.setFetchMode("propertyName", FetchMode.SELECT); 
我已经试过了,效果很好。FetchMode.LAZY在源代码中被标记为已弃用,它所做的只是指向FetchMode.SELECT

休眠代码:

public static final FetchMode LAZY = SELECT;

我也没有找到任何东西。看起来更好的一个并没有偏离hibernate的默认设置。我通过预测解决了这个问题。(我不需要整个实体,尽管我宁愿避免定义新的DTO)。这对我来说很有效-我使用了Criteria.DISTINCT_ROOT_实体和setFirstResult&setMaxResults,但得到的结果太少了。@Che javara-只是尝试了一下,但对我不起作用。我正在使用Hibernate 3.6.10。在代码中搜索用法,没有发现Hibernate跳过集合/关联加载的情况。有没有关于去哪里找的建议?