下面是我试图在我的代码中实现但无法继续进行的场景。由于这个问题,我在过去 3 天卡住了
表 A、B、C
表 A {
colmnn PKA
列测试;
@OneToMany
@Cascade( { org.hibernate.annotations.CascadeType.ALL, org.hibernate.annotations.CascadeType.DELETE_ORPHAN })
@JoinColumn(name = "PKA")
private Collection<TableC> tablec= new ArrayList<TableC>();
}
表B{
列PKB
列test2;
@OneToMany(mappedBy = "tablec",fetch=FetchType.LAZY)
@Cascade( { org.hibernate.annotations.CascadeType.ALL,org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
private List tableC= new ArrayList(); //List is used only for Hibernate mapping
}
表 c{
列 PKC
@ManyToOne @JoinColumn(name = "PKA" ) private TableA tableA;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "PKB",nullable = false,unique=true)
private TableB tableb;
}
所以表C和表A是多对一的关系,和表B是一对一的关系(通过唯一实现的就是“真”)
现在我的问题是,当我插入数据时,休眠首先插入表 B 数据,然后它试图插入表 c 数据并抛出错误不能在非空列中插入 Null。如果我将表 C 中的 PkA 设置为非空,则它正在正确插入所有数据。在休眠日志中,它正在按以下顺序触发 sql 语句
表 B 表 C 表 A。表 C 插入查询应在最后执行。任何帮助表示赞赏。