我已经用Hibernate和Kotlin创建了下面的OneToOne关系。但是,当我初始化Parent()
时,它要求我将child
值设置为Parent(child=null)
,这是不期望的。只有初始化子项时才要求父项为Child(parent=Parent(...)
,如果我同时将父项添加到子项,又将子项添加到父项,这将创建一个无限循环。如何避免这种情况?
@Entity
class Parent(
@Id
@Column(nullable = false, updatable = false, columnDefinition = "uuid")
val id: UUID = UUID.randomUUID(),
@OneToOne(cascade = [CascadeType.ALL], mappedBy = "parent")
@JsonIgnore
@JoinColumn(name = "child_id", referencedColumnName = "id")
val child: Child?
)
@Entity
class Subscriber(
@Id
@Column(nullable = false, updatable = false, columnDefinition = "uuid")
val id: UUID = UUID.randomUUID(),
@OneToOne(cascade = [CascadeType.ALL], optional = false)
@JoinColumn(name = "id", columnDefinition = "uuid")
@MapsId
val parent: Parent
)
1条答案
按热度按时间wh6knrhe1#
由于父项和子项是一对一Map,您希望使用@MapsId,以便不在子表中创建另一个额外PK现在子对象将使用具有自己PK parent_id
对于父级
子项
查看下面的屏幕截图,了解表在数据库中的外观。x1c 0d1x