Hibernate 休眠,插入孙子只更新祖父母->;父级未更新
我在hibernate中具有以下双向关系结构。我正在使用名为Hibernate 休眠,插入孙子只更新祖父母->;父级未更新,hibernate,kotlin,parent-child,cascade,Hibernate,Kotlin,Parent Child,Cascade,我在hibernate中具有以下双向关系结构。我正在使用名为祖父母、父母和孩子的对象。正如人们所料,祖父母有一个父母的列表,而我自己有一个孩子的列表。 当我尝试插入一个新的子时,问题就出现了,然后更改不会传播到父存储库,但有趣的是,它会传播到祖父母存储库 请注意,我使用的是Kotlin,因此我们具有显式的可空性 @Entity(name = "grandparent") data class Grandparent( @Id @GeneratedValue(strategy =
祖父母
、父母
和孩子
的对象。正如人们所料,祖父母
有一个父母
的列表,而我自己有一个孩子
的列表。
当我尝试插入一个新的子
时,问题就出现了,然后更改不会传播到父存储库
,但有趣的是,它会传播到祖父母存储库
请注意,我使用的是Kotlin,因此我们具有显式的可空性
@Entity(name = "grandparent")
data class Grandparent(
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
var id: Long = -1
@NotNull var name: String,
@OneToMany(
cascade = [CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.MERGE, CascadeType.REMOVE],
orphanRemoval = true,
mappedBy = "factoryHall",
fetch = FetchType.EAGER)
@Fetch(value = FetchMode.SUBSELECT)
@NotNull var parents: MutableList<Parent>,
)
@Entity(name = "parent")
data class Parent(
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
var id: Long = -1
@ManyToOne(cascade = [CascadeType.MERGE],
optional = true
)
@JoinColumn(name="grandparent_id")
var grandparent: Grandparent? = null,
@NotNull var name: String,
@OneToMany(
cascade = [CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.MERGE, CascadeType.REMOVE],
orphanRemoval = true,
mappedBy = "factoryHall",
fetch = FetchType.EAGER)
@Fetch(value = FetchMode.SUBSELECT)
@NotNull var children: MutableList<Child>,
) {
override fun toString(): String {
return "{" +
"id: " + id + ", " +
"name: " + name + ", " +
"children: " + children.toString() + ", " +
"}"
}
}
@Entity(name = "child")
data class Child(
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
var id: Long = -1
@ManyToOne(cascade = [CascadeType.MERGE],
optional = true
)
@JoinColumn(name="child_id")
var Parent: Parent? = null,
@NotNull var name: String,
) {
override fun toString(): String {
return "{" +
"id: " + id + ", " +
"name: " + name + ", " +
"}"
}
}
这仅仅意味着我首先保存父对象,然后保存相应的子对象及其父属性集。
这样,我以后就有了一个填充的祖父母存储库
,其中所有的祖父母
都填充了父母的列表
,而那些父母则填充了他们的孩子的列表
。
但是,在parentRepository
中,未填充每个父项的子项的列表
遗憾的是,单向关系(它很容易解决这个问题)不允许传播已删除的子对象,因此这一关系不存在
有谁能告诉我这里发生了什么,解决这个问题的最佳方法是什么
var savedGrandparent = grandparentRepository.save(grandparent)
for(parent in grandparent.parents){
var savedParent = parentRepository.save(Parent(savedPlant, parent.name, parent.children))
for(child in parent.children){
childRepository.save(Child(savedParent, child.name))
}
}