在本机Hibernate中设置FetchMode

时间:2008-10-28 13:53:48

标签: java hibernate

我需要在我的hibernate映射上设置fetch模式在某些情况下是急切的,而在其他情况下则是懒惰的。我的默认值(通过hbm文件设置)为lazy =“true”。如何在代码中覆盖此设置? MyClass有一个MyClass2类型的集合,我想将FetchMode设置为EAGER。

目前,我有类似的内容:

Session s = HibernateUtil.getSessionFactory().openSession();
MyClass c = (MyClass)session.get(MyClass.class, myClassID);

3 个答案:

答案 0 :(得分:5)

你可以尝试这样的事情:(代码离我头顶)

Criteria crit = session.createCriteria(MyClass.class);
crit.add(Restrictions.eq("id", myClassId));
crit.setFetchMode("myProperty", FetchMode.EAGER);
MyClass myThingy = (MyClass)crit.uniqueResult();

我认为应该使用FetchMode.JOIN或FetchMode.SELECT代替FetchMode.EAGER。

答案 1 :(得分:3)

如果你没有使用Criteria,那么JOIN FETCH关键字也会急切加载连接指定的关联。

session.createQuery("select p from Parent p join fetch p.children c")

答案 2 :(得分:1)

initialize(Object)主类中有一个静态Hibernate方法。您可以使用它来强制加载您的收藏:

MyClass c = (MyClass)session.get(MyClass.class, myClassID);
Hibernate.initialize(c.getMySetOfMyClass2());

但是,延迟提取的默认值只是:默认值。您可能希望覆盖特定Set的映射中的延迟。