Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用联接表和Hibernate JPA和约束冲突问题_Java_Hibernate_Jpa_Db2 - Fatal编程技术网

Java 使用联接表和Hibernate JPA和约束冲突问题

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

我已经将代码从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( 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