栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Hibernate忽略“惰性”获取类型并立即加载属性

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Hibernate忽略“惰性”获取类型并立即加载属性

Hibernate无法代理您自己的对象。此问题至少有三种众所周知的解决方案:最简单的解决方案是伪造一对多关系。这将起作用,因为延迟加载集合比延迟加载单个可为空的属性要容易得多,但是通常,如果使用复杂的JPQL
/
HQL查询,此解决方案将非常不便。另一种是使用构建时字节码检测。有关更多详细信息,请阅读Hibernate文档:19.1.7。使用懒惰的属性获取。请记住,在这种情况下,必须将@LazyToOne(LazyToOneOption.NO_PROXY)批注添加到一对一关系以使其变得懒惰。仅将获取设置为LAZY是不够的。最后一种解决方案是使用运行时字节码检测,但是它仅对在成熟的JEE环境中将Hibernate用作JPA提供程序的用户有效(在这种情况下,将“
hibernate.ejb.use_class_enhancer”设置为true应该可以解决问题:实体管理器配置),或将Hibernate与Spring配置为进行运行时编织(在某些较旧的应用程序服务器上可能很难实现)。在这种情况下,还需要@LazyToOne(LazyToOneOption.NO_PROXY)批注。

 @Entitypublic class Animal implements FieldHandled { private Person owner; private FieldHandler fieldHandler; @oneToOne(fetch = FetchType.LAZY, optional = true, mappedBy = "animal") @LazyToOne(LazyToOneOption.NO_PROXY) public Person getOwner() {  if (fieldHandler != null) {   return (Person) fieldHandler.readObject(this, "owner", owner);  }  return owner; } public void setOwner(Person owner) {  if (fieldHandler != null) {   this.owner = fieldHandler.writeObject(this, "owner", this.owner, owner);   return;  }  this.owner = owner; } public FieldHandler getFieldHandler() {  return fieldHandler; } public void setFieldHandler(FieldHandler fieldHandler) {  this.fieldHandler = fieldHandler; }}

您可以尝试一下吗:http : //justonjava.blogspot.in/2010/09/lazy-one-to-one-and-one-to-
many.html



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/447789.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号