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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
Hibernate JPA使用复合主键持久化表的对象列表_Hibernate_Jpa - Fatal编程技术网

Hibernate JPA使用复合主键持久化表的对象列表

Hibernate JPA使用复合主键持久化表的对象列表,hibernate,jpa,Hibernate,Jpa,我需要用复合主键保存一个表的对象列表,如下所示。但我得到一个错误,原因是:java.sql.BatchUpdateException:ORA-00001:违反了唯一约束。 但是列表中的项目是独一无二的,我做错了什么 //表结构 @Entity @Table(name="COMP_PRIMARY") CompPrimaryObj{ @Id @Column(name="KEY1") private String key1; @Id @Column(name=

我需要用复合主键保存一个表的对象列表,如下所示。但我得到一个错误,原因是:java.sql.BatchUpdateException:ORA-00001:违反了唯一约束。 但是列表中的项目是独一无二的,我做错了什么

//表结构

@Entity
   @Table(name="COMP_PRIMARY")
   CompPrimaryObj{
   @Id
   @Column(name="KEY1")
   private String key1;

   @Id
  @Column(name="KEY2")
  private Long key2;
   }
//我的服务层中的代码

List<CompPrimaryObj> compPrimaryObjList = new ArrayList<CompPrimaryObj>();
CompPrimaryObj obj1 = new CompPrimaryObj();
obj1.setKey1("key1");
obj1.setKey2(11111);
compPrimaryObjList.add(obj1);
CompPrimaryObj obj2 = new CompPrimaryObj();
obj2.setKey1("key2");
obj2.setKey2(222222);
compPrimaryObjList.add(obj2);
for(CompPrimaryObj compPrimaryObj:compPrimaryObjList){
   em.persist(compPrimaryObj);  // em stands for Entity manger instance
}
List compPrimaryObjList=new ArrayList();
CompPrimaryObj obj1=新CompPrimaryObj();
obj1.setKey1(“key1”);
obj1.setKey2(11111);
compPrimaryObjList.add(obj1);
CompPrimaryObj obj2=新的CompPrimaryObj();
对象J2.设置键1(“键2”);
obj2.setKey2(22222);
compPrimaryObjList.add(obj2);
for(CompPrimaryObj CompPrimaryObj:compPrimaryObjList){
empersist(compPrimaryObj);//em代表实体管理器实例
}

处理复合主键时,有两个选项。在它们中,您必须创建一个新类来保存表示PK的字段:

复合主键:

@Entity 
@Table(name="COMP_PRIMARY")
@IdClass(CompPrimaryObjId.class)
public class CompPrimaryObj {
    @Id 
    @Column(name="KEY1")
    String key1;
    @Id 
    @Column(name="KEY2")
    Long key2;
    //...
}
public class CompPrimaryObjId{
    String key1;
    Long key2;
}
或使用嵌入式主键:

@Embeddable
public class CompPrimaryObjId {       
    @Column(name="KEY1")
    private String key1;
    @Column(name="KEY2")
    private Long key2;
    // ...
   }
}

@Entity
@Table(name="COMP_PRIMARY")
public class CompPrimaryObj {
     @EmbeddedId
     private CompPrimaryObjId id;
     //....
}

最近我用复合主键映射了
@多对多
。看看这篇文章,我想它能给你所有需要的信息


感谢您,我将尝试使用相同的注释。我尝试使用Idclass注释,但仍然得到相同的唯一Constant错误,我认为我如何持久化对象列表存在问题。您是否尝试过
@embedded
@EmbeddedId
注释?您是否已将PK类
CompPrimaryObjId
添加到映射类中?您是否尝试过@Embedded和@EmbeddedId注释?