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;
}
및 기본 키 클래스
설명 된 매핑이 잘못되었지만 필자는 필자의 필요성을 설명하기 때문에이 방법으로 게시했습니다. 여러 페이지를 통해 검색했지만이 매핑을 수행하는 방법을 찾을 수 없습니다. 읽기에 미리
감사합니다,
후안 로메로
답변 해 주셔서 감사합니다. –
2와 3을 따릅니다. 엔티티 클래스 [class AccesoriosAutos]의 주석 된 요소 [field auto]에 대한 JoinColumns가 불완전합니다. 소스 엔터티 클래스가 복합 기본 키를 사용하는 경우 JoinColumns를 사용하여 각 조인 열에 대해 JoinColumn을 지정해야합니다. name과 referencedColumnName 요소는 각각의 JoinColumn에 지정되어야합니다. –
1의 경우 ID 주석을 삭제하면 다음과 같이 표시됩니다. 예외 설명 : 복합 기본 키 지정이 잘못되었습니다. 기본 키 클래스 [AccesoriosAutosPk 클래스]와 엔터티 빈 클래스 [AccesoriosAutos]의 기본 키 필드 또는 속성의 이름은 일치해야하며 그 유형은 동일해야합니다. 또한 XML의 해당 속성에 대한 ID 요소 및/또는 엔터티 클래스의 해당 필드 또는 속성에 대한 @Id를 지정했는지 확인하십시오. 그래서 둘 다 가질 필요가 있음을 이해합니다. 내가 잘못? –