如何在Hibernate中初始化子对象?

如何在Hibernate中初始化子对象?,hibernate,Hibernate,我正在尝试运行以下代码: Session session = HibernateUtil.getSessionFactory().openSession(); Transaction tx = session.beginTransaction(); Hibernate.initialize(fooA); Hibernate.initialize(fooA.getfooB()); <--- org.hibernate.LazyInitializationException: could n

我正在尝试运行以下代码:

Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = session.beginTransaction();

Hibernate.initialize(fooA);
Hibernate.initialize(fooA.getfooB()); <--- org.hibernate.LazyInitializationException: could not initialize proxy - no Session

tx.commit();
session.close();
Hibernate.initialize(对象)是否关闭当前会话?

Hibernate.initialize(…)不会关闭当前会话。在上面的代码片段中,您正在创建一个会话,然后对一个与该会话不关联的对象(fooA)调用initialize

您可以使用
session.refresh(fooA)将fooA重新连接到会话呼叫。重新附加对象后,对
初始化的第二次调用应按预期进行

如果您发现自己经常需要像这样初始化代理,这可能表明由于(n-1)select问题,懒散初始化是不可取的。值得深思

public class Foo{
  private String name;
  private FooA fooA;
}

public class FooA{
  private String name;
  private FooB fooB;
}

public class FooB{
  private String name;
}