Моя модель имеет типичное отношение «родители-дети», которое JPA-моделируется однонаправленным отношением @OneToMany
:
a 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 не устанавливает идентификатор родительского элемента для дочернего элемента (столбец 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
)