代码之家  ›  专栏  ›  技术社区  ›  Elie

在本机休眠中设置fetchmode

  •  4
  • Elie  · 技术社区  · 16 年前

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

    目前,我有一些类似的东西:

    Session s = HibernateUtil.getSessionFactory().openSession();
    MyClass c = (MyClass)session.get(MyClass.class, myClassID);
    
    3 回复  |  直到 16 年前
        1
  •  5
  •   Mat Mannion    16 年前

    你可以这样做:(代码在我的头上)

    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.earger。

        2
  •  3
  •   Damo    16 年前

    如果你不使用标准,还有 JOIN FETCH 关键字,它将急切地加载由联接指定的关联。

    session.createQuery("select p from Parent p join fetch p.children c")
    
        3
  •  1
  •   Henning    16 年前

    有静电 initialize(Object) 方法在 Hibernate 主类。您可以使用它强制加载集合:

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

    但是,lazy getching的默认值只是: 违约 价值。您可能想要覆盖特定集合映射中的惰性。