我正在使用hibernate Reverse Engineering工具从我的数据库生成pojo。假设我的数据库中有两个表A和B,另一个表ABMap有两列A_id和B_id,它们分别是表A和B的外键,ABMap的主键是A_id和B_id的复合键。 现在,当我构建项目并生成pojos时,而不是通过hibernate将ABMap生成为单独的实体,它将作为Set添加到实体A中。下面是实体A中生成的代码片段,
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = “ABMap”, schema= “myDB”, joinColumns = {
@JoinColumn(name = “A_id”, nullable = false, updatable = false) }, inverseJoinColumns = {
@JoinColumn(name = “B_id”, nullable = false, updatable = false) })
public Set getBs() {
return this.bs;
}
public void setBs(Set bs) {
this.bs = bs;
}
现在的问题是,使用hibernate或Jpa我可以插入到ABMap表中而不实际拥有ABMap实体但我无法更新相同的记录,因为@JoinColumn中的可更新元素被hibernate反向设置为false工程工具。下面是尝试更新B_id的值时发生的sql错误。
2014-12-17 13:26:50,639错误(qtp850520326-20)[org.hibernate.engine.jdbc.spi.SqlExceptionHelper] - UPDATE语句与FOREIGN KEY约束“FK_A_B”冲突。冲突发生在数据库“myDB”,表“B”,列“B_id”。
如何将@JoinColumn中的可更新元素设置为true?