任何人都可以解释一下hibernate注释如何使用不同类型的级联,如delete,upadte,save-update?
如何确保删除所有者时,其车辆也会被删除(但不是相反)
@Entity
public class Owner
{
@OneToOne(cascade=CascadeType.ALL)
private DrivingLicense license;
@OneToMany(mappedBy="owner", cascade={CascadeType.PERSIST, CascadeType.MERGE})
private Collection cars;
...
}
@Entity
public class DrivingLicense
{
private String serialNumber;
...
}
@Entity
public class Car
{
private String registrationNumber;
@ManyToOne(cascade={CascadeType.PERSIST, CascadeType.MERGE})
private Owner owner;
...
}
答案 0 :(得分:2)
这里的缺陷是有两个CascadeType枚举。一个是javax.persistence,另一个是来自hibernate。一般来说,我更喜欢使用持久性。
对于级联更新,请记住“更新”是一个休眠术语,jpa不知道这一点。 Jpa不需要它,因为在JPA中,想法是您更新的字段将自动刷新到数据库。如果你对关系做了任何改变,那些也将会更新。所以你不需要更新级联。
对于save-update,这是一个使用persist或update的休眠快捷方式,具体取决于对象的状态。由于您已经覆盖了持久性和更新(见上文),因此您不需要级联。
要级联删除,您可能希望使用@OrphanRemoval
。这将确保如果关系的父级被删除,孩子也会消失(但不是相反)。
@OneToMany(mappedBy="owner", cascade={CascadeType.PERSIST, CascadeType.MERGE})
@OrphanRemoval
private Collection cars;