[英]How to tell JPA to manage dependent entities?
我的 model 有一個典型的父子關系,它是由單向@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).
在parentRepository.save(a_parent)
行。
顯然,JPA 並沒有在 child 上設置 parent 的 id(列children.parent_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
不可為空,請注意nullable = false
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.