我正在尝试运行以下代码:
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)是否会关闭当前会话?
答案 0 :(得分:0)
Hibernate.initialize(...)不会关闭当前会话。在上面的代码片段中,您将创建一个会话,然后在与该会话无关的对象(fooA)上调用initialize。
您可以通过session.refresh( fooA );
电话将fooA重新连接到会话。重新连接对象后,对intialise
的第二次调用应该按预期运行。
如果您发现自己需要经常初始化此类代理,则可能是由于(n-1)选择问题导致延迟初始化不可取的指示。值得深思!