0
我有以下的情況下,避免了明顯的代碼:一對多複合主鍵的情況
的對象:
@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;
}
到目前爲止,一切正常。 但是,如果我需要修改汽車這個(添加其他對象的列表):
@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;
}
而且孩子:
@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;
}
,並在主鍵類:
public class AccesoriosAutosPk {
private BigDecimal codAcces;
private AutosPk auto;
}
描述的映射是錯誤的,但我發佈這種方式,因爲我認爲它解釋了我的需要。我已經搜索了幾頁,但我無法找到做這種映射的方式。
預先感謝閱讀,
胡安·羅梅羅
謝謝您的回答。 – 2012-04-17 14:04:18
我按照圖2和3和I得到 註釋元件上的JoinColumns [字段自動]從實體類[類AccesoriosAutos]是不完全的。當源實體類使用複合主鍵時,必須使用JoinColumns爲每個連接列指定JoinColumn。名稱和referencedColumnName元素都必須在每個這樣的JoinColumn中指定。 – 2012-04-17 14:15:36
對於如圖1所示,如果我把Id註解我得到: 異常說明:無效複合主密鑰規範。主鍵類[AccesoriosAutosPk類]中的主鍵字段或屬性的名稱以及實體Bean類[類AccesoriosAutos]中的主鍵字段或屬性的名稱必須對應,並且它們的類型必須相同。另外,請確保已爲XML中的相應屬性指定了ID元素,並且/或者在實體類的相應字段或屬性中指定了@Id。 所以,我明白我需要有兩個。我錯了嗎? – 2012-04-17 14:19:43