gpt4 book ai didi

java - JPA 处理没有外键的关系

转载 作者:行者123 更新时间:2023-12-02 12:21:37 25 4
gpt4 key购买 nike

如果我有一个包含客户、员工、时间表的系统,并且它们都有与之关联的附件。我想要一个可以共享的通用表,而不是每次都创建一个附件表。

|  ID  |  TYPE      |  FILE_LOCATION  |  FILE_TYPE  | REFERENCED_ID |
| 1 | CLIENT | C:\temp1.pdf | PDF | 22 |
| 2 | TIMESHEET | C:\temp2.pdf | PDF | 342 |

在这种情况下,reference_id 将链接,但不会是外键,因为它可以转到许多不同的表。

如果我想要特定客户端的所有附件,我会使用这样的 SQL

SELECT * FROM ATTACHMENT WHERE TYPE = 'CLIENT' AND REFERENCE_ID = 22;

这种类型的关系可以用 JPA/Hibernate 建模吗?

最佳答案

是的,他们可以。

您所描述的是根 Attachment 的映射具有多个子实体( ClientAttachmentTimesheetAttachment )的实体,使用

  • SINGLE_TABLE 继承策略,
  • 列 TYPE 作为鉴别列,
  • 值“CLIENT”作为 ClientAttachment 实体的鉴别器值,
  • 值“TIMESHEET”作为 TimesheetAttachment 实体的鉴别器值。

所有子实体都将与其所属实体(客户、时间表)建立多对一关联,并使用 REFERENCE_ID 作为连接列。

我宁愿使用一个附件实体/表,没有任何 REFERENCED_ID 列,以及几个连接表:每个具有附件的实体一个。这会更干净:可以使用真正的外键,而不是将多个不同表的 ID 存储在同一列中。它还将避免对所有这些子类的需要。您只需在每个具有附件的实体中与附件建立 OneToMany 关联。

关于java - JPA 处理没有外键的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45738935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com