0

明らかなコードを避けて、次のシナリオがあります。

オブジェクト:

@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;
}

この時点まで、すべてが正常に機能します。しかし、Autos をこれに変更する必要がある場合 (他のオブジェクトのリストを追加):

@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;
}

説明されているマッピングは間違っていますが、私の必要性を説明していると思うので、このように投稿しました。いくつかのページを検索しましたが、このマッピングを行う方法が見つかりません。

読んでくれてありがとう、

フアン・ロメロ

4

1 に答える 1

0

私の観点から言及することがいくつかあります。

  1. @Id で @IdClass を使用しているのは奇妙です。
  2. Autos クラスは @OneToMany(mappedBy = "auto", ....) として accesorios に注釈を付ける必要があります
  3. AccesoriosAuto 自動列に @JoinColumn(name="cod_auto") で注釈を付けるだけです

お役に立てれば。

于 2012-04-16T22:38:37.703 に答える