【发布时间】:2011-03-31 03:27:45
【问题描述】:
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,而不必创建一个看起来像实体的对象并且必须重新映射所有价值观。
【问题讨论】:
标签: java hibernate lazy-loading