使用 Hibernate 的 OneToMany 和 JoinTable 注释到带有 Quarkus 的复合键的实体

问题描述 投票:0回答:1

Hibernate 的 OneToMany/JoinTable 与复合键

在一对多关系中使用复合键时,我在使用

@JoinTable
注释时遇到问题。我正在使用 Quarkus 框架。我面临的当前错误是“收集映射中的重复列”。这是因为我在
joinColumns
inverseJoinColumns
中都使用了 duck_id。 Duck_id 需要两个在两个地方。
在我缺少的 Quarkus 中使用复合键有什么不同吗?我研究过 Quarkus 确实支持它,但我找不到任何使用 JoinTable 注释的示例。

需要注意的是,我没有办法手动修改数据库表。

桌子

这两个表在这个范围内。

  • duck_mission
  • 第二个表“duck_mission”只有两列,“duck_id”和“mission_id”,其中两列都是其对应表的外键。这两个外键一起构成了表“duck_mission”的主键。此表使用 CompositeKey 来满足所有实体必须具有主键的要求。 注意:mission_id 是此处未列出的另一个名为“Mission”的表的外键。

实体

鸭实体

@JoinTable

鸭任务实体

@Entity @Table(name = "duck") public class DuckEntity extends PanacheEntityBase { @Id @GeneratedValue @Column(name = "id") public UUID id; @OneToMany @JoinTable( name = "duck_mission", joinColumns = @JoinColumn(name = "duck_id"), inverseJoinColumns = { @JoinColumn(name = "duck_id", referencedColumnName = "duckId"), @JoinColumn(name = "mission_id", referencedColumnName = "missionId") } ) public List<DuckMissionEntity> duckMissions; //Other columns, getters, and setters }

我试过用
@Data @Embeddable class DuckMissionEntityId implements Serializable { @Column(name = "duck_id") public UUID duckId; @Column(name = "mission_id") public UUID missionId; } @Entity @Table(name = "duck_mission") public class DuckMissionEntity extends PanacheEntityBase { // The Composite Key @EmbeddedId public DuckMissionEntityId id; public UUID duckId; public UUID missionId; //Other Getters and Setters }

代替

@IdClass
,但它们之间似乎没有区别。我也尝试用其他值代替
embeddedId
。 如果我将
joinColumns
添加到
(nullable = false, insertable=false, updatable=false)
我然后得到错误 'null id generated for:class'.
    

hibernate jpa quarkus composite-key hibernate-onetomany
1个回答
0
投票
inverseJoinColumns,

中,您已经通过

DuckMissionEntity
映射了
duckId
missionId
,因此无需将它们重新声明为单独的属性。

    

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.