面对缓慢的数据库操作,您已经追踪到急切地获取具有深层实体层次结构的 OneToOne 关系的问题,导致查询中出现过多的连接。不幸的是,尝试注释 @OneToOne(fetch = FetchType.LAZY) 或 @ManyToOne(fetch = FetchType.LAZY) 已被证明是徒劳的。
@ManyToOne(fetch = FetchType.LAZY)应该按预期工作。仔细检查 HQL 查询或 Criteria API 获取模式中可能取代类注释的覆盖。如果问题仍然存在,请提供代码示例以供进一步分析。
@OneToOne 更为细致。如果关系不可为空,请按如下方式指定:
@OneToOne(optional = false, fetch = FetchType.LAZY)
对于可为空的关系,请考虑以下方法:
添加外键Column: 向所有者表添加外键列并将关系映射为"joined":
@OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "other_entity_fk") public OtherEntity getOther();
@OneToOne(mappedBy = "other") public OwnerEntity getOwner();
虽然延迟获取可以缓解性能问题,但请谨慎行事。如果存在大量急切的 OneToOne 关系导致过度连接,请考虑解决数据模型或实体关系中的潜在结构问题。
以上是如何使 JPA OneToOne 关系变得惰性?的详细内容。更多信息请关注PHP中文网其他相关文章!