2012-04-16 12 views
0

私は明白なコードを避け、次のシナリオを持っている:OneToMany複合主キーシナリオ

オブジェクト:

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

1つ以上の子オブジェクト:

@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. あなたが@Idと@IdClassを使用している奇妙です。クラスは@OneToManyとしてaccesorios注釈をつける必要があります
  2. 自動車(mappedBy = "オート"、....)
  3. AccesoriosAuto自動列がちょうど@JoinColumn(名前= "cod_auto")、このことができます

希望に注釈を付けます。

+0

あなたの答えをありがとう。 –

+0

私は2と3に従います。 エンティティクラス[クラスAccesoriosAutos]の注釈付き要素[フィールドオート]のJoinColumnsが不完全です。ソースエンティティークラスが複合主キーを使用する場合、JoinColumnsを使用して各結合列に対してJoinColumnを指定する必要があります。 nameとreferencedColumnNameの両方の要素をそのようなJoinColumnで指定する必要があります。 –

+0

1の場合、Idアノテーションを削除すると、次のようになります。 例外:複合主キーの指定が無効です。主キークラス[クラスAccesoriosAutosPk]とエンティティBeanクラス[クラスAccesoriosAutos]の主キーフィールドまたはプロパティの名前は一致していなければならず、型も同じでなければなりません。また、XML内の対応する属性のID要素および/またはエンティティクラスの対応するフィールドまたはプロパティの@Idを指定していることを確認してください。 私は両方を持っている必要があることを理解しています。私が間違っている? –

関連する問題