2011-10-07 3 views
0

복합 기본 키가있는 테이블의 개체 목록을 저장해야하므로 다음과 같이 수행합니다. 하지만 오류가 발생했습니다 : java.sql.BatchUpdateException : ORA-00001 : 고유 한 제약 조건이 위반되었습니다. 그러나 목록의 항목은 고유합니다. 무엇이 잘못 되었나요?JPA 복합 기본 키가있는 테이블의 개체 목록

내 서비스 계층

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 
} 

답변

1

복합 기본 키를 다루는 // 테이블 구조는

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

    @Id 
    @Column(name="KEY2") 
    private Long key2; 
    } 

// 코드, 두 가지 옵션이 있습니다.

복합 기본 키 :

@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; 
    //.... 
} 
+0

고맙습니다. – Greg

+0

Idclass 주석을 사용해 보았지만 동일한 고유 한 constaint 오류가 계속 발생했습니다. 객체 목록을 유지하는 방법에 문제가 있다고 생각합니다. – Greg

+0

'@ Embeddable'과'@ EmbeddedId' 주석을 사용해 보셨습니까? –

0
그들 각각에, 당신은 PK를 나타내는 필드를 보유 할 새 클래스를 만들 수있어

최근 복합 기본 키로 @Many-To-Many을 매핑했습니다. 이 게시물을 보면 모든 필요한 정보를 줄 수 있다고 생각합니다.

Mapping ManyToMany with composite Primary key and Annotation:

관련 문제