任何人都可以向我解释 hibernate 注解如何使用不同类型的级联,如删除、更新、保存更新吗?
我怎样才能确保当车主被删除时,它的车也被删除(而不是相反)
@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;
...
}
最佳答案
这里的陷阱是有两个 CascadeType 枚举。一个来自 javax.persistence,另一个来自 hibernate。一般来说,我更愿意使用持久性。
对于级联更新,请记住“更新”是一个 hibernate 术语,jpa 不知道这一点。 Jpa 不需要它,因为在 JPA 中的想法是您更新的字段将自动刷新到数据库。如果您对关系进行了任何更改,这些更改也会刷新。所以你不需要级联更新。
对于保存更新,这是一个 hibernate 快捷方式,可以根据对象的状态使用持久化或更新。由于您已经涵盖了持久化和更新(见上文),因此您不需要级联。
要级联删除,您可能想改用@OrphanRemoval
。这将确保如果关系的父项被删除,子项也将消失(但反之则不然)。
@OneToMany(mappedBy="owner", cascade={CascadeType.PERSIST, CascadeType.MERGE})
@OrphanRemoval
private Collection cars;
关于java - 如何在hibernate注解中使用级联类型保存、删除、更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21230688/