3

私は休止状態を使用しており、次のような2つのテーブル(レガシー、再構築できません)があります

表 A

@Entity
@Table(name = "tableA")
public Class TableA implements Serializable {
    @EmbeddedId private TableAId tableAId;

    @OneToOne(mappedBy = "tableA")
    private TableB tableB;

    // getters, setters, hashCode and equals ommited
}

テーブル A の複合 ID

@Embeddable
public class TableAId implements Serializable {
    protected int id1;
    protected String id2;
    protected int id3;
    // getters, setters, hashCode and equals ommited
}

表 B

@Entity
public class TableB implements Serializable {
    @OneToOne
    @JoinColumn(name = "tableB", referencedColumnName = "id3")
    protected TableA tableA;
    // getters, setters, hashCode and equals ommited
}

上記のコードでわかるように、テーブルの複合キーの 1 つ以上 (すべてではない) のプロパティを使用して、テーブル B をテーブル A に結合する必要があります。私はすでに次の3つのアプローチで成功していません。

  1. 上記のコードとまったく同じです。
  2. このような referencedColumnName 値の変更

    referencedColumName = "tableAId.id3"
    
  3. 次のように、TableA の pojo エンティティにも複合キーを合成するプロパティを追加します。

    // TableA
    @Column(name = "id1", insertable = false, updatable = false)
    private Integer id1;
    

私はこれが可能であれば??、それがあれば助けていただければ幸いです!!

4

1 に答える 1

0

ここでは、JPA アノテーション @MapsId が役立つと思います。

http://docs.oracle.com/javaee/6/api/javax/persistence/MapsId.html

TableA クラスでは、tableB プロパティに対してこれを試してください。

@MapsId("id3")
@OneToOne(mappedBy = "tableA")
private TableB tableB;

同様に、TableB クラスの tableA プロパティから @JoinColumn アノテーションを削除します。

于 2012-09-04T23:18:04.733 に答える