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

Java使OneToOne关系变得懒惰

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

Java使OneToOne关系变得懒惰

首先,对KLE的答案进行一些澄清:

  1. 无约束(可为空)的一对一关联是没有字节码检测就无法代理的唯一关联。原因是所有者实体必须知道关联属性应包含代理对象还是NULL,并且由于通常是通过共享PK进行一对一映射,因此无法通过查看其基表的列来确定该属性。无论如何,必须急切地获取代理,使其毫无意义。这是更详细的说明。

  2. 多对一关联(显然是一对多)不受此问题的困扰。所有者实体可以轻松地检查其自己的FK(如果是一对多,则最初会创建空集合代理并按需填充),因此关联可以很懒。

  3. 用一对多替换一对一几乎不是一个好主意。你可以用唯一的多对一替换它,但是还有其他(可能更好)的选择。

Rob H.有一个有效的观点,但是根据你的模型,你可能无法实现它(例如,如果一对一关联可以为空)。

现在,就原始问题而言:

A)

@ManyToOne(fetch=FetchType.LAZY)
应该工作正常。你确定查询本身不会覆盖它吗?可以
join fetch
HQL
中指定和/或通过
Criteria API
显式设置获取模式,这将优先于类注释。如果不是这种情况,但你仍然遇到问题,请发布你的课程,查询和生成的SQL,以进行更多的即时对话。

B)@OneToOne比较棘手。如果绝对不能为空,请遵循Rob H.的建议并将其指定为:

@oneToOne(optional = false, fetch = FetchType.LAZY)

否则,如果你可以更改数据库(向所有者表添加外键列),请进行更改并将其映射为“ joined”:

@oneToOne(fetch = FetchType.LAZY)@JoinColumn(name="other_entity_fk")public OtherEntity getOther()

并在OtherEntity中:

@oneToOne(mappedBy = "other")public OwnerEntity getOwner()

如果你不能做到这一点(并且不能随心所欲地获取),则字节码检测是你唯一的选择。但是,我必须同意CPerkins的意见-如果你有80 岁!由于渴望OneToOne协会而加入,那么你遇到了更大的问题



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

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

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