这里是示例:
@Entity(name="Cat")
public class Cat
{
@ManyToOne
@JoinColumn(name="FoodId",nullable=true)
public Food getFood()
{
// code
...
}
@Entity(name="Food")
public class Food
{
@OneToMany(mappedBy="food",cascade=?
public List<Cat> getCats()
{
// other code
...
}
我想删除一些食物实体,因此 cat.foodId 列设置为空值,以便为拥有此食物的猫设置 null 值。
Food fish=new Food()
Cat bazillio=new Cat()
bazillio.food=fish
context.remove(fish)
if (bazilio.food==null) success()
据我了解,Cascade.ALL 会删除所有含有该食物的猫(或不删除?) 那么如何解决这个任务呢?
最佳答案
其中一个关系应标记为逆
。我想那将是 Food.getCats()
Food-to-Cat 关系上的级联应该为 None,因为猫独立于 Food 实体,这通过 Cat.getFood()
上的 nullable
来证明。
删除食物将像 Ryan 指定的那样简单。
- 加载猫,其中食物设置为指定食物
- 将 cat.food 设置为 null
- 保存猫实例并删除食物实例(可以按任意顺序执行)
关于java - 如何在 hibernate 中删除父实体并在子FK列中设置null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7502726/