gpt4 book ai didi

java - Hibernate - 避免 LazyInitializationException - 从代理和 session 中分离对象

转载 作者:搜寻专家 更新时间:2023-10-31 20:31:05 24 4
gpt4 key购买 nike

MyObject myObject = repositoryHibernateImpl.getMyObjectFromDatabase();
//transaction is finished, and no, there is not an option to reopen it
ThirdPartyUtility.doStuffWithMyObjectType( myObject );

此时你已经定义了什么是延迟加载和急切加载,第三方实用程序将尝试调用你的“myObject”实例上的所有方法,这很好,因为你不想返回任何东西对于延迟加载的属性,不幸的是它不返回 null,它抛出一个 LazyInitializationException

发生这种情况是因为您实际上是在调用对象的 Hibernate 代理上的方法,并且它知道它没有获取该数据,并抛出异常。

是否有可能获取具有 null 值的底层对象,以便 getter 只返回 null,而不抛出异常?基本上分离对象,以便 Hibernate 根本不再知道它。延迟加载对象的访问器必须返回 null,它不能返回实际值,我们希望能够将实体转换为 POJO,而不必创建一个看起来像实体的对象并且必须重新映射所有值(value)观。

最佳答案

假设您有一个字段,在 getter 中您可以:

MyField getMyField() {
if (Hibernate.isInitialized(myField)) {
return myField;
}
return null;
}

来自 org.hibernate.Hibernate 的 javadoc:

public static boolean isInitialized(Object proxy): check if the proxy or persistent collection is initialized.

关于java - Hibernate - 避免 LazyInitializationException - 从代理和 session 中分离对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3505423/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com