当前位置: 首页 > 面试题库 >

Hibernate-避免LazyInitializationException-从代理和会话中分离对象

施晗昱
2023-03-14
问题内容

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,而不必创建看起来像实体的对象并且必须重新映射所有对象。价值观。


问题答案:

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

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

从org.hibernate.Hibernate的javadoc中:

public static boolean isInitialized(Object proxy):检查代理或持久性集合是否已初始化。



 类似资料:
  • 问题内容: 至此,您已经定义了什么是懒惰的并且渴望加载的,并且第三方实用程序将尝试调用“ myObject”实例上的所有方法,这很好,因为您不想为懒惰地返回任何东西加载的属性,不幸的是它不会返回null,而是抛出。 发生这种情况是因为您实际上是在对象的Hibernate代理上调用该方法,并且它知道该方法尚未获取该数据,并引发异常。 甚至有可能获得具有null值的基础对象,以便getter仅返回nu

  • 堆栈跟踪 applicationContext.xml application-security.xml mvc-config.xml web.xml

  • 问题内容: 我通过服务将dao称为 在岛上,我得到的产品 运行正常,但如果我将dao类更改为 我得到org.hibernate.LazyInitializationException:无法初始化代理- 没有会话。例外发生在我只是在打印产品的视图层中。我不明白为什么在dao方法中在同一行中返回会导致视图层出现异常,但是如果将其保存在引用中然后返回它,效果很好。 问题答案: 这是一个很好的参考,可让您

  • 我知道我的问题很奇怪,很难理解 我为我的项目创建了一些结构。但每次我都会遇到不同的问题,如<code>无法初始化代理-再次没有会话</code>或<code>不可序列化异常</code>等 我想得到一些建议或帮助。我尝试使用注释< code>transactional,但不知道在哪种情况下应该使用< code > implements Serializable 。当然,我知道如果我想在视图范围内使

  • 我有一个LazyInitializationException问题,我不知道如何解决它。 之前的问题是我打电话的时候。getperson=null,但我修复了findProjectEmployeesWithinDates请求获取此人的调用。但当我调用“findProjectEmployeesWithinDates”时,我遇到了一个例外。查找项目员工的代码包括: 所以用debbug我看到: 它位于f

  • 我使用< code>spring-data-jpa与< code > spring-boot(v 2 . 0 . 0 . release),我刚刚在MySQL上写了一个CRUD演示,但是在运行时出现异常,源代码如下: 源码 User.java UserRepository.java 用户服务测试.java 应用程序.yml 例外详细信息 我尝试另一种方法,它可以成功运行。