gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 13:31:23 24 4
gpt4 key购买 nike

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

尝试使用一个相关的Entity创建并保留Property,如下所示:

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
)

最佳答案

单向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

关于java - 如何告诉JPA管理从属实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61233438/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com