我的模型有一个典型的父子关系,它是由单向@OneToMany
关系建模的JPA:Parent
有0..n个Child
实例(即List<Child>
(。
尝试创建并持久化具有一个依赖Property
的Entity
,如下所示:
val a_parent = Parent(
id = "I_am_a_parent",
children = listOf(Child(kind="childish"))
)
parentRepository.save(a_parent)
的惊人结果
org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [parent_id]; nested exception is
...
Caused by: org.postgresql.util.PSQLException:
ERROR: null value in column "parent_id" violates not-null constraint
Detail: Failing row contains (22, childish, null).
在线路CCD_ 7处。
显然,JPA不会在子项(列children.parent_id
(上设置父项的id。
为什么不呢?如何告诉它这样做
Parent
和Child
的代码如下
@Entity
@Table(name = "parents")
data class Parent (
@Id
@Column(name = "id")
var id: String? = null,
@OneToMany(cascade = [CascadeType.ALL], orphanRemoval = true)
@JoinColumn(name = "parent_id")
var properties: List<Child> = listOf()
)
@Entity
@Table(name = "children")
data class Child (
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
var id: Int? = null,
@Column(name = "kind")
var kind: String? = null
)
单向OneToMany可能必须以这种方式实现(参考(:
data class Parent (
//...
@OneToMany(cascade = [CascadeType.ALL], orphanRemoval = true)
@JoinColumn(name = "parent_id", nullable = false)
var properties: List<Child> = listOf()
)
如果数据库列parent_id
不可为null,请注意nullable = false
。