[英]Hibernate annotation Cascade problem
我有一个 Java class 包含另一个 class 的列表。
@Entity public class Country {
private Long id;
private List<Hotel> hotels;
public void setId(Long id) {
this.id = id;
}
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="COUNTRY_SEQ")
@SequenceGenerator(name="COUNTRY_SEQ", sequenceName="COUNTRY_SEQ", allocationSize=1)
public Long getId() {
return id;
}
public void setHotels(List<Hotel> hotels) {
this.hotels = hotels;
}
@OneToMany
@JoinTable(
name="COUNTRY_HOTELS",
joinColumns=@JoinColumn(name="COUNTRY_ID"),
inverseJoinColumns=@JoinColumn(name="HOTEL_ID")
)
public List<Hotel> getHotels() {
return hotels;
}
}
当我尝试删除国家/地区时,我得到“ORA-02292:违反完整性约束(HOT.fk1a1e72aaf2b226a) - 找到子记录”,因为当其子项(=Hotels)仍然存在时,它无法删除国家/地区。
然而,它是这样的。 我不想在删除国家/地区时删除我的酒店。
我试过没有任何@Cascade-annotation,但它失败了。 我也尝试了 SAVE_UPDATE,但仍然失败。 那么我需要哪个@Cascade-annotation(或者还有其他解决方案吗?):
巴特
您必须在删除国家/地区之前从国家/地区的酒店列表中删除酒店,以便告诉 Hibernate 该酒店不再有国家/地区。
不幸的是 Hibernate 还不支持ON DELETE SET NULL
类型的级联。 因此,您必须先手动删除引用,然后才能删除子实体。
未来会要求Hibernate 支持它。
看起来您使用的是 Oracle。 它允许您通过使用ON DELETE CASCADE
( http://www.techonthenet.com/oracle/foreign_keys/foreign_delete.php ) 定义外键COUNTRY_ID
在数据库级别实现级联删除。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.