2012-04-16 86 views
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; 
} 

描述的映射是錯誤的,但我發佈這種方式,因爲我認爲它解釋了我的需要。我已經搜索了幾頁,但我無法找到做這種映射的方式。

預先感謝閱讀,

胡安·羅梅羅

回答

0

我有幾件事情從我的角度提點:

  1. 令人奇怪的是,你正在使用@IdClass @Id用。
  2. 汽車類應標註ACCESORIOS爲@OneToMany(的mappedBy = 「自動」,....)
  3. AccesoriosAuto自動柱只是@JoinColumn(NAME = 「cod_auto」)

希望這有助於註釋。

+0

謝謝您的回答。 – 2012-04-17 14:04:18

+0

我按照圖2和3和I得到 註釋元件上的JoinColumns [字段自動]從實體類[類AccesoriosAutos]是不完全的。當源實體類使用複合主鍵時,必須使用JoinColumns爲每個連接列指定JoinColumn。名稱和referencedColumnName元素都必須在每個這樣的JoinColumn中指定。 – 2012-04-17 14:15:36

+0

對於如圖1所示,如果我把Id註解我得到: 異常說明:無效複合主密鑰規範。主鍵類[AccesoriosAutosPk類]中的主鍵字段或屬性的名稱以及實體Bean類[類AccesoriosAutos]中的主鍵字段或屬性的名稱必須對應,並且它們的類型必須相同。另外,請確保已爲XML中的相應屬性指定了ID元素,並且/或者在實體類的相應字段或屬性中指定了@Id。 所以,我明白我需要有兩個。我錯了嗎? – 2012-04-17 14:19:43