Hibernate延迟初始化要求

时间:2014-01-31 13:02:46

标签: hibernate jpa

如果我们将属性注释为惰性初始化为true,则无法访问该属性。例如

@ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="orgTypeID")
    private OrganizationType type;

我们无法访问组织类型。那么在课堂上声明这样的场,吸气剂和制定者的需要是什么?

我们不需要加入。感谢您能解释一下。

1 个答案:

答案 0 :(得分:0)

除非要求提取具有'lazy'提取的对象,否则不会提取。

对于懒惰地进行提取,对象必须仍处于会话上下文中。如果您尝试在会话上下文(分离对象)之外访问此惰性属性,您将在服务器上看到一个延迟初始化错误 - 没有会话问题。

要将对象放回会话中,您必须打开会话并将对象合并到会话中并尝试获取惰性属性。

要解决您的问题,如果您预计将来会提取此惰性属性,则必须在以下列方式加载父级时手动获取它。

Session session = factory.getSession();

Class clas = session.find(Class.class, id);

clas.type();//here you are anticipating that it will be used somewhere else, so force it to load

session.close();
//    clas.type(); // Hypothetically, if you try to load the type here, this may not work as the session is closed before this line. the object is now in detached state.

希望它能回答你的问题。