【问题标题】:JPA: Unidirectional one-to-many relationship with composite semi-shared primary key without join tableJPA:具有复合半共享主键的单向一对多关系,无需连接表
【发布时间】:2018-05-19 07:38:10
【问题描述】:

JPA:

如何在 JPA 中建模以下内容:

  • 单向一对多关系
  • 拥有实体具有单列应用程序确定的主键 AND
  • 子实体有一个复合主键AND
  • 其中子主键的一部分是父主键 AND
  • 避免 JPA 生成连接表。

有什么想法吗?

【问题讨论】:

  • 如果你没有指定任何@JoinColumn,你只会得到一个连接表,所以只要确保你有一个@JoinColumn。其余部分与此无关
  • 我有个主意:你能给我们展示一组实体示例(甚至是草图左右)吗?我对拥有实体具有单列应用程序确定的主键且子实体具有复合主键的情况特别感兴趣

标签: jpa composite-primary-key jointable


【解决方案1】:

我自己想出了如何做到这一点。

  • 您需要在拥有实体中注释外键

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "myId", referencedColumnName = "parentId")
    private List<ChildEntity> childEntity;
    
  • 子实体中的主键部分,也是引用拥有实体的外键,不得注释为外键,例如:

    @Id
    private String parentId;
    
  • 关于复合主键的通常规则适用于子类(主键类用@Embeddable等注释)

  • 正如用户 DN1 所评论的,必须使用 @JoinColumn 注释,但必须在所属类的外部引用中指定它。

  • 出于某种原因,您也不能使用@PrimaryKeyJoinColumn 代替@JoinColumn,否则JPA 生成连接表。

另一个挑战是拥有类的主要也是复合的,但我没有尝试过。

【讨论】:

    猜你喜欢
    • 2011-06-12
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 2012-12-02
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多