在一对多关系中使用复合键时,我在使用
@JoinTable
注释时遇到问题。我正在使用 Quarkus 框架。我面临的当前错误是“收集映射中的重复列”。这是因为我在 joinColumns
和 inverseJoinColumns
中都使用了 duck_id。 Duck_id 需要两个在两个地方。在我缺少的 Quarkus 中使用复合键有什么不同吗?我研究过 Quarkus 确实支持它,但我找不到任何使用 JoinTable 注释的示例。
需要注意的是,我没有办法手动修改数据库表。
桌子
鸭
实体
@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'.inverseJoinColumns,
中,您已经通过
DuckMissionEntity
映射了duckId
和missionId
,因此无需将它们重新声明为单独的属性。