JPA:单向 one-to-many 与复合 semi-shared 主键的关系,无连接 table
JPA: Unidirectional one-to-many relationship with composite semi-shared primary key without join table
JPA:
如何在 JPA 中对以下内容建模:
- uni-directionalone-to-many关系
- 其中 拥有实体具有 single-column application-determined 主键 AND
- 其中 child 实体 有一个 复合主键 AND
- 其中 child 的主键的一部分是 parent 的主键 AND
- 避免 JPA 生成连接table。
有什么想法吗?
我自己想出了如何做到这一点。
您需要用
注释拥有实体中的外键
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "myId", referencedColumnName = "parentId")
private List<ChildEntity> childEntity;
子实体中的主键部分也是引用拥有实体的外键,不得注释为外键,例如:
@Id
private String parentId;
关于复合主键的通常规则适用于子 class(主键 class 用 @Embeddable
等注释)
正如用户 DN1 评论的那样,必须使用 @JoinColumn
注释,但必须在拥有 class.
[ 的外部引用中指定=37=]
出于某种原因,您也不能使用 @PrimaryKeyJoinColumn
而不是 @JoinColumn
,否则 JPA 将 生成连接表。
另一个挑战是拥有 class 的主节点也是复合的,但我还没有尝试过。
JPA:
如何在 JPA 中对以下内容建模:
- uni-directionalone-to-many关系
- 其中 拥有实体具有 single-column application-determined 主键 AND
- 其中 child 实体 有一个 复合主键 AND
- 其中 child 的主键的一部分是 parent 的主键 AND
- 避免 JPA 生成连接table。
有什么想法吗?
我自己想出了如何做到这一点。
您需要用
注释拥有实体中的外键@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) @JoinColumn(name = "myId", referencedColumnName = "parentId") private List<ChildEntity> childEntity;
子实体中的主键部分也是引用拥有实体的外键,不得注释为外键,例如:
@Id private String parentId;
关于复合主键的通常规则适用于子 class(主键 class 用
@Embeddable
等注释)正如用户 DN1 评论的那样,必须使用
[ 的外部引用中指定=37=]@JoinColumn
注释,但必须在拥有 class.出于某种原因,您也不能使用
@PrimaryKeyJoinColumn
而不是@JoinColumn
,否则 JPA 将 生成连接表。
另一个挑战是拥有 class 的主节点也是复合的,但我还没有尝试过。