【发布时间】:2021-04-12 11:46:48
【问题描述】:
我在将 OneToMany 外键映射到复合主键时遇到问题。我已经尝试了很多解决方案,包括这个帖子@OneToMany and composite primary keys?。
所以情况是:
我有两个实体,例如 Box 和 Color,复合主键位于子端(Color)。
@Entity
@Table(name = "box")
data class Box(
@Id
var id: Int = 0,
...
@OneToMany(cascade = [CascadeType.ALL])
@JoinColumns(
JoinColumn(name = "box_id", referencedColumnName = "id"),
JoinColumn(name = "locale", referencedColumnName = "locale"))
val colors: List<Color> = emptyList(),
)
@Entity
@Table(name = "color")
data class Color(
@EmbeddedId
var colorId: ColorId? = null,
) : Serializable
@Embeddable
data class ColorId(
var id: Int = 0,
@Column(name = "locale", insertable = false, updatable = false)
var locale: Locale = Locale.Germany
) : Serializable
因此,在 Box 实体中,我尝试在 Box 和 Color 实体之间创建 OneToMany 映射。为此,我应该使用 Color 实体的复合主键吗?如果我尝试将列连接到复合主键(就像我在 Box 实体中所做的那样),我会收到一条错误消息 - 无法找到逻辑列“区域设置”。
我该如何解决这个问题?
或者这个问题的巧妙解决方案是什么?
【问题讨论】:
标签: java hibernate kotlin jpa hibernate-mapping