如何告诉JPA管理从属实体?

问题描述 投票:0回答:1

我的模型有一个典型的父子关系,该关系是通过单向@OneToMany关系进行JPA建模的:Parent具有Child的0..n个实例(即List<Child>)。

尝试如下创建和保留具有一个从属EntityProperty

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不会在子级上设置父级的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
)
java jpa kotlin one-to-many hibernate-onetomany
1个回答
0
投票

单向OneToMany可能必须以这种方式实现(reference):

data class Parent (
  //...
    @OneToMany(cascade = [CascadeType.ALL], orphanRemoval = true)
    @JoinColumn(name = "parent_id", nullable = false)
    var properties: List<Child> = listOf()
)

如果数据库列nullable = false不可为空,请注意parent_id。>

© www.soinside.com 2019 - 2024. All rights reserved.