2010-02-08 23 views
18

我正在写一个针对域模型的查询,其中(无论出于何种原因)一对多关联映射为lazy =“false”。在我特别的问题中,我宁愿懒懒地取出那个集合,因为我不关心它的内容。我怎样才能让我的特殊查询重新获得懒惰?这可能吗?Hibernate:在Criteria API中启用延迟获取

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

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

编辑:我们使用Hibernate的3.3.2

回答

-6

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

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

+0

我也没有发现任何东西。看来最好不要偏离hibernate的默认值。我已经通过预测来解决这个问题。 (我不需要整个实体,尽管我宁愿避免定义一个新的DTO)。 – meriton 2010-02-09 15:12:46

+3

看到我的答案,setFetchMode工作。 – 2012-06-01 03:51:28

4

万一有人偶然发现这个(像我一样),请参考this。看起来这是一个Hibernate文档错误,并且FetchMode.SELECT确实会导致延迟加载

25

接受的答案是错误的。 Hibernate允许你在标准中进行懒读取,这是默认情况下在映射中急切需要的。只需拨打电话

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

我试过这个,它工作。 FetchMode.LAZY被标注为废弃的源代码,它是所有指向FetchMode.SELECT

Hibernate代码:

public static final FetchMode LAZY = SELECT; 
+1

这对我有用 - 我使用Criteria.DISTINCT_ROOT_ENTITY与setFirstResult&setMaxResults并得到太少的结果。 – blank 2012-06-22 06:09:38

+2

@Che javara - 只是尝试过这一点,而不是为我工作。我使用Hibernate 3.6.10。搜索使用代码,没有一个看起来是Hibernate跳过加载集合/关联的情况。有什么建议在哪里看? – mikemil 2013-11-07 20:11:43

+0

hibernate 4.0.5不适合我 – nxhoaf 2016-07-04 05:10:11