0

2つのエンティティをある方法でマッピングしたいと思いone to manyます。

A->[B, B]

join tableもっとフィールドに追加したいです 。Pojos次のようになります:

@Entity
@Table(name = "A", schema = "examples")
@SecondaryTable(name = "A_B", pkJoinColumns = @PrimaryKeyJoinColumn(name = "a_id", referencedColumnName = "id"))
public class A
{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @Basic
    private String name;

    @Basic
    private Integer field1;

    @Column(table = "A_B", name = "field2")
    private Integer field2;

    @OneToMany(cascade = {CascadeType.ALL})
    @JoinTable(name = "A_B", joinColumns = {@JoinColumn(name = "a_id")}, inverseJoinColumns = {@JoinColumn(name = "b_id")})
    private List<B> datastores;
}


@Entity
@Table(name = "B", schema = "examples")
@SecondaryTable(name = "A_B", pkJoinColumns = @PrimaryKeyJoinColumn(name = "b_id", referencedColumnName = "id"))
public class B
{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;


    @Basic
    private String field1;

    @Basic
    private int field2;

    @Column(table = "A_B", name = "field3")
    private int field3;
}

追加するために私はテーブルのforeign key上を削除しなければならなかったということです。A_Bマッピングを解決して許可するにはどうすればよいforeign keysですか?

ありがとう。

4

1 に答える 1

2

何かが足りませんが、エンティティAとエンティティBの両方がテーブル「A_B」にマッピングされている理由がわかりません。これをセカンダリテーブルとしてエンティティAに追加することにより、テーブルaへの挿入が発生するたびに、テーブルA_Bへの挿入も発生する必要があることを示しています。つまり、2つのテーブルの行間に厳密な1:1の関係が作成されます。エンティティBに対して同じことを行うことを除いて、A_Bの行はA_id = somevalue、B_id = null、その他の行はa_id = null、b_id=somevalueになります。テーブル「A_B」はリレーションテーブルのように見えるので、これはおそらくあなたが望むものではありません。

A_Bがリレーションテーブルの場合は、「A_B」テーブルの場合と同様に、ManyToManyを使用してマップする必要があります。入力する必要のある追加のフィールドがある場合は、ABエンティティを作成し、A->ABおよびB->ABからOneToManyを作成し、AB->AおよびAB->BからManyToOneを作成します。

于 2012-10-23T18:35:50.930 に答える