Hibernate 休眠惰性初始化要求

Hibernate 休眠惰性初始化要求,hibernate,jpa,Hibernate,Jpa,如果我们将属性注释为true,则无法访问该属性。乙二醇 @ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name="orgTypeID") private OrganizationType type; 我们无法访问组织类型。那么,在类上声明这样的字段、getter和setter需要什么呢 我们不需要加入。如果您能解释一下,我将不胜感激。具有“惰性”获取的对象将不会被获取,除非请求它们 要使抓取延迟进行,对象必须仍处于会话上下文中。如果您

如果我们将属性注释为true,则无法访问该属性。乙二醇

@ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="orgTypeID")
    private OrganizationType type;
我们无法访问组织类型。那么,在类上声明这样的字段、getter和setter需要什么呢


我们不需要加入。如果您能解释一下,我将不胜感激。

具有“惰性”获取的对象将不会被获取,除非请求它们

要使抓取延迟进行,对象必须仍处于会话上下文中。如果您尝试在会话上下文(分离的对象)之外访问此惰性属性,您将在服务器上看到lazyinitialization错误-无会话问题

要将对象放回会话中,必须打开一个会话并将对象合并到会话中,然后尝试获取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.

希望它能回答你的问题

为什么不能使用getter访问它?你有什么错误吗?你说我们不需要加入是什么意思?您是否只需要映射
OrganizationType
id?如果我们尝试访问它,则该对象为空。但实际上数据是存在的。当我调试组织类型时,值为'org.hibernate.proxy.pojo.javassist.javassistlazinitializer'时,Lazy意味着它不会立即获取,而是在首次访问时从数据库/缓存中获取。一些提供者能够从当前上下文之外的数据库中获取它,但不是全部。因此,如果您关闭用于读取实体的entityManager,您的惰性引用可能不再工作,如果您序列化实体,它肯定不会工作,除非您已经使其被获取。如果你环顾四周,有很多教程和文档可以解释这一点。如果不清楚,请解释更多您想要的内容和遇到的问题。