2012-04-16 5 views
0

I가 다음과 같은 시나리오, 명백한 코드를 피 :OneToMany 복합 기본 키 시나리오

객체 :

@Entity 
@Table(name = "poliza") 
public class Polizas implements Serializable { 
    @Id 
    @Column(name = "numero_poliza") 
    private BigDecimal numero; 
} 

하나 이상의 자식 개체 :

@Entity 
@Table(name = "Autos") 
@IdClass(AutosPk.class) 
public class Autos { 
    @Id 
    @Column(name = "auto_id") 
    private BigDecimal autoId; 
    @Id 
    @ManyToOne 
    @JoinColumn(name = "numero_poliza") 
    private Polizas poliza; 
} 

기본 키 클래스 :

public class AutosPk { 
    private BigDecimal autoId; 
    private BigDecimal poliza; 
} 

이 시점까지 모든 것이 잘 작동합니다. 하지만 (A 다른 객체 목록 추가)이에 자동차를 수정해야하는 경우 :

@Entity 
@Table(name = "Autos") 
@IdClass(AutosPk.class) 
public class Autos { 
    @Id 
    @Column(name = "auto_id") 
    private BigDecimal autoId; 
    @Id 
    @ManyToOne 
    @JoinColumn(name = "numero_poliza") 
    private Polizas poliza; 
    @OneToMany(mappedBy = "auto_id", cascade = { CascadeType.ALL }) 
    private List<AccesoriosAutos> accesorios; 
} 

그리고 아이 :

public class AccesoriosAutosPk { 
    private BigDecimal codAcces; 
    private AutosPk auto; 
} 
:
@Entity 
@Table(name = "acce_auto") 
@IdClass(AccesoriosAutosPk.class) 
public class AccesoriosAutos { 
    @Id 
    @Column(name = "cod_acces") 
    private BigDecimal codAcces; 
    @Id 
    @ManyToOne 
    @JoinColumns({@JoinColumn(name = "numero_poliza", referencedColumnName = "numero_poliza"), 
     @JoinColumn(name = "cod_auto", referencedColumnName = "cod_auto")}) 
    private Autos auto; 
} 

및 기본 키 클래스

설명 된 매핑이 잘못되었지만 필자는 필자의 필요성을 설명하기 때문에이 방법으로 게시했습니다. 여러 페이지를 통해 검색했지만이 매핑을 수행하는 방법을 찾을 수 없습니다. 읽기에 미리

감사합니다,

후안 로메로

답변

0

나는 내 관점에서 언급 할 몇 가지가 있습니다

  1. 당신이 @Id와 @IdClass를 사용하는 이상하다 . 클래스는 @OneToMany로 accesorios 주석해야
  2. 자동차 (mappedBy = "자동", ....)
  3. AccesoriosAuto 자동 열 그냥 @JoinColumn (이름 = "cod_auto")이 도움이

희망과 주석 .

+0

답변 해 주셔서 감사합니다. –

+0

2와 3을 따릅니다. 엔티티 클래스 [class AccesoriosAutos]의 주석 된 요소 [field auto]에 대한 JoinColumns가 불완전합니다. 소스 엔터티 클래스가 복합 기본 키를 사용하는 경우 JoinColumns를 사용하여 각 조인 열에 대해 JoinColumn을 지정해야합니다. name과 referencedColumnName 요소는 각각의 JoinColumn에 지정되어야합니다. –

+0

1의 경우 ID 주석을 삭제하면 다음과 같이 표시됩니다. 예외 설명 : 복합 기본 키 지정이 잘못되었습니다. 기본 키 클래스 [AccesoriosAutosPk 클래스]와 엔터티 빈 클래스 [AccesoriosAutos]의 기본 키 필드 또는 속성의 이름은 일치해야하며 그 유형은 동일해야합니다. 또한 XML의 해당 속성에 대한 ID 요소 및/또는 엔터티 클래스의 해당 필드 또는 속성에 대한 @Id를 지정했는지 확인하십시오. 그래서 둘 다 가질 필요가 있음을 이해합니다. 내가 잘못? –