Java 使用联接表和Hibernate JPA和约束冲突问题
我已经将代码从Hibernate2.x升级到5.3.7.Final,在连接表中出现了一个错误 假设涉及两个表。表a、表B和JoinTable,JoinTable是表a和表B之间具有链接的表 问题围绕着存在约束问题的JoinTable TableA有字段:ARCHDEF 表B有字段:PART_REV_ID JoinTable有:ARCHDEF和PART_REV_ID 在tableB中添加新条目时,存在下面针对JoinTable的约束错误 Bean Pojo代码:Java 使用联接表和Hibernate JPA和约束冲突问题,java,hibernate,jpa,db2,Java,Hibernate,Jpa,Db2,我已经将代码从Hibernate2.x升级到5.3.7.Final,在连接表中出现了一个错误 假设涉及两个表。表a、表B和JoinTable,JoinTable是表a和表B之间具有链接的表 问题围绕着存在约束问题的JoinTable TableA有字段:ARCHDEF 表B有字段:PART_REV_ID JoinTable有:ARCHDEF和PART_REV_ID 在tableB中添加新条目时,存在下面针对JoinTable的约束错误 Bean Pojo代码: /// TABLEA @Table
/// TABLEA
@Table( name = "DART_ARCHDEF_MASTER" )
public class Archdef implements Serializable {
/// JOINTABLE
@ManyToMany( targetEntity = PartRevision.class )
//@JoinTable( name = "DART_ARCHDEF_PART", uniqueConstraints = { @UniqueConstraint(columnNames = "PART_REV_ID") }, joinColumns = { @JoinColumn( name = "ARCHDEF_NAME" ) }, inverseJoinColumns = { @JoinColumn( name = "PART_REV_ID" ) } )
@JoinTable( name = "DART_ARCHDEF_PART", joinColumns = { @JoinColumn( name = "ARCHDEF_NAME" ) }, inverseJoinColumns = { @JoinColumn( name = "PART_REV_ID" ) } )
private Set< PartRevision > parts;
}
/// TABLE B
@Entity
@Table( name = "DART_PART_REVISION" )
public class PartRevision implements Serializable {
@ManyToOne
@JoinTable( name = "DART_ARCHDEF_PART", joinColumns = { @JoinColumn( name = "PART_REV_ID" ) }, inverseJoinColumns = { @JoinColumn( name = "ARCHDEF_NAME" ) } )
private Archdef archdef;
@Id
@GeneratedValue( strategy = GenerationType.IDENTITY )
@Column( name = "PART_REV_ID" )
private int id;
}
出错时的SQL:
insert
into IDSDPFS.DART_ARCHDEF_PART ( ARCHDEF_NAME , PART_REV_ID )
values ( ? , ? )
HOST VARIABLE DATA USED WITH THIS SQL REQUEST
PARAMETER MARKER 1 = 'COBJY10'
PARAMETER MARKER 2 = 260403
您的错误消息显示:
DB2 SQL Error: SQLCODE=-803, SQLSTATE=23505
-803表示Db2错误SQL0803N,下面是解释:
SQL0803N由DELETE语句引起的INSERT语句、UPDATE语句或外键更新中的一个或多个值无效,因为索引id标识的主键、唯一约束或唯一索引限制了表名的索引键具有重复值。以下是用户响应部分关于上页的INSERT语句:
检查由index-id标识的索引的定义。
:
对于INSERT语句,请检查对象表内容以确定指定值列表中的哪些值违反唯一性约束。或者,如果INSERT语句包含子查询,则该子查询处理的对象表内容必须与对象表内容相匹配,以确定问题的原因。请注意,如果使用安全策略保护该表,则LBAC凭据可能不允许您查看导致错误的行。
如果索引位于XML列上,语句为INSERT或UPDATE,请考虑XML文档是否会导致单个XML文档中的重复值。
因此,您可能需要检查表和索引的定义
希望这有帮助。删除了多余的保存,仍然是相同的问题检查您的表是否存在,并检查您连接的用户是否有访问数据库的权限。它是存在的。有些插入可以工作,但大多数不能,特别是当存在多个零件版本id记录时。它存在,请查看约束错误。我没有看到任何约束错误;SQLCODE=-204表示表IDSDPFS.DART_ARCHDEF_MASTER_DART_PART_修订版不存在。看起来您在
System.getProperty(“db2.qualifier”)
中提供了一个错误的值,并用正确的错误进行了更新
insert
into IDSDPFS.DART_ARCHDEF_PART ( ARCHDEF_NAME , PART_REV_ID )
values ( ? , ? )
HOST VARIABLE DATA USED WITH THIS SQL REQUEST
PARAMETER MARKER 1 = 'COBJY10'
PARAMETER MARKER 2 = 260403
DB2 SQL Error: SQLCODE=-803, SQLSTATE=23505