【发布时间】:2018-04-06 10:24:03
【问题描述】:
我正在使用 Hibernate JPA 实现将关系数据库映射到我的模型对象。
请看简图:
在我的应用程序中,我需要一位客户一次拥有一个植入物或一个假体,并非两者都可以。我想在我的客户模型中只有一个字段来链接假体或植入物,这很好,但我不知道如何..
目前,我正在考虑不使用任何关系映射,并将客户字段设置为:
- 字段“类型”:植入物或假体
- 字段“prosthesis”:可为空
- 字段“植入”:可为空
并根据类型的值执行 JPQL 查询以获取 DTO(如果类型是 Prosthesis,则语法 new my.package.dto.Prosthesis(...) from Prosthesis,对于 Implant,依此类推)。
除非您证明我错了,否则即使客户的类型是 Implant,关系映射也可能会尝试连接客户表和假体表。我想避免这种不必要的查询。
SO 社区有什么优化建议吗?
非常感谢
【问题讨论】:
-
我也认为映射关系将使用 JOIN 处理,但我认为 @OneToOne 关系,正如您的模型所暗示的那样,因为它们与连接的 ID 匹配,所以足够快。
-
@Guillem 是的,但它会导致两个具有@OneToOne 关系的字段,这将执行两个连接查询。也许如果我把 LAZY 放在他们两个身上?我要测试
-
我认为 LAZY 仅适用于 OneToMany 或 ManyToMany,以便将获取“延迟”到调用变量的那一刻,但不适用于 OneToOne。无论如何,根据我的经验,获取 OneToOne 关系很快,因为它使用 JPA Id 主键。
标签: java hibernate jpa jakarta-ee orm