在将Quarkus 2.16迁移到3(以及Hibernate 5.6迁移到6)之后,我在持久化数据方面遇到了一个bug。基本上,我的schema看起来像这样:
@Entity
class Person {
@Column(name = "name")
private String name;
@OneToMany(
mappedBy = "owner",
cascade = CascadeType.ALL,
orphanRemoval = true,
fetch = FetchType.EAGER
)
private Set<Pet> pets = new HashSet<>();
}
@Entity
class Pet {
@Column(name = "name")
private String name;
@JoinColumn(name = "fkidperson",
referencedColumnName = "id")
@ManyToOne(optional = false)
private Person owner;
@OneToMany(mappedBy = "pet",
cascade = CascadeType.ALL,
orphanRemoval = true,
fetch = FetchType.EAGER)
private Set<Food> foods = new HashSet<>();
}
@Entity
class Food {
@Column(name = "name")
private String name;
@JoinColumn(name = "fkidpet",
referencedColumnName = "id")
@ManyToOne(optional = false)
private Pet pet;
}
我会尝试用POST请求更新它,
{
"id": 2,
"name": "John",
"pets": [
{
"id": null,
"name": "Fuffy",
"foods": []
}
]
}
而在后端,我想用entityManager.merge(person)
覆盖前一个人,但失败了,
org.hibernate.AssertionFailure: null identifier for collection of role (Pet.foods)
在它工作之前。有什么想法吗?谢谢!
1条答案
按热度按时间egdjgwm81#
这个问题可能是因为它正在初始化声明中的列表。
试试看: