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;
}
記載されているマッピングは間違っていますが、私はそれが私の必要性を説明していると思うので、この方法で投稿しました。私はいくつかのページを検索しましたが、私はこのマッピングを行う方法を見つけることができません。読書のため事前に
おかげで、
フアン・ロメロ
あなたの答えをありがとう。 –
私は2と3に従います。 エンティティクラス[クラスAccesoriosAutos]の注釈付き要素[フィールドオート]のJoinColumnsが不完全です。ソースエンティティークラスが複合主キーを使用する場合、JoinColumnsを使用して各結合列に対してJoinColumnを指定する必要があります。 nameとreferencedColumnNameの両方の要素をそのようなJoinColumnで指定する必要があります。 –
1の場合、Idアノテーションを削除すると、次のようになります。 例外:複合主キーの指定が無効です。主キークラス[クラスAccesoriosAutosPk]とエンティティBeanクラス[クラスAccesoriosAutos]の主キーフィールドまたはプロパティの名前は一致していなければならず、型も同じでなければなりません。また、XML内の対応する属性のID要素および/またはエンティティクラスの対応するフィールドまたはプロパティの@Idを指定していることを確認してください。 私は両方を持っている必要があることを理解しています。私が間違っている? –