java - Hibernate 注解级联问题

标签 java hibernate annotations cascade constraints

我有一个 Java 类,其中包含另一个类的列表。

@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(或者有其他解决方案?):

  • 坚持
  • 合并
  • 删除
  • 刷新
  • 删除
  • SAVE_UPDATE
  • 复制
  • DELETE_ORPHAN
  • 锁定
  • 退出

巴特

最佳答案

在删除国家/地区之前,您必须从国家/地区的酒店列表中删除酒店,以便告诉 Hibernate 这些酒店不再有国家/地区。

关于java - Hibernate 注解级联问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6609103/

相关文章:

java - 如何在 Java 中搜索两个字符串之间的值范围

java - Hibernate 给我无效的更新 sql 查询

asp.net-mvc - MVC : Make model parameter required only on certain views

python-3.x - 如何注释返回 self 的 Python3 方法?

java - Activity 中的转换界面

如果字段多次出现在 PDF 表单中,Java PDFBox 不会维护该字段的字体外观

java - 用户名、密码等硬编码到程序中——如何从文件中获取它们?

java - Hibernate/JPA -> 可空值和对象?

java - 如何使用旧的 hibernate 条件进行批处理?

在lenskit和jdk 10中找不到javax.annotation.PreDestroy类