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

时间:2015-01-16 19:55:30

标签: hibernate

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

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();

以下是有关我的POJO的更多信息

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

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

public class FooB{
  private String name;
}

Hibernate.initialize(object)是否会关闭当前会话?

1 个答案:

答案 0 :(得分:0)

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

您可以通过session.refresh( fooA );电话将fooA重新连接到会话。重新连接对象后,对intialise的第二次调用应该按预期运行。

如果您发现自己需要经常初始化此类代理,则可能是由于(n-1)选择问题导致延迟初始化不可取的指示。值得深思!