簡體   English   中英

如何告訴 JPA 管理依賴實體?

[英]How to tell JPA to manage dependent entities?

我的 model 有一個典型的父子關系,它是由單向@OneToMany關系建模的 JPA:
一個Parent有 0..n 個Child實例(即一個List<Child> )。

嘗試創建和持久化具有一個依賴PropertyEntity ,如下所示:

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 )。

為什么不? 以及如何告訴它這樣做?

ParentChild的代碼如下

@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM