1

私が使用している:
Spring 3.2
Hibernate 4.1.9

JPA を使用して、3 つのクラスをマップする必要があります。クラス A は、クラス B と多対多の関係にあります。クラス A とクラス B の一意の組み合わせは、クラス C のコレクションを所有する必要があります。

表 A

foo
id | name

表 B

bar
id | name

表 C

data
id | xrefId

Join Table --一意のキー on (fooId,barId)

xref
id | fooId | barId

既存のデータ構造を変更することはオプションではありません。

編集1:

目標: Foo をロードし、Bar のコレクションを取得します。各バーから、その (彼らの!) データのコレクションを取得します。

クラスA

@Entity
public class Foo {
  @Id
  private UUID id;

  @ManyToMany(optional = false)
  @JoinTable(name               = "xref",
             joinColumns        = { @JoinColumn(name = "fooId") },
             inverseJoinColumns = { @JoinColumn(name = "barId") })
  private List<Bar> lstBar = new ArrayList<Bar>();
}

クラスB

public class Bar {
  @Id
  private UUID id;

  @ManyToMany(mappedBy = "lstBar")
  private List<Foo> lstFoo = new ArrayList<Foo>();
}

クラスC

public class Data {
  @Id
  private UUID id;
}
4

3 に答える 3

0

この例を見てください (簡単にするために UUID の代わりに整数を使用しましたが、残りは問題ありません)。

バークラス:

public class Bar {
    @Id
    private Integer id;
    @Column(name = "name")
    private String name;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "barId")
    private Collection<Xref> xrefCollection;
}

フークラス:

public class Foo {
    @Id
    private Integer id;
    @Column(name = "name")
    private String name;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "fooId")
    private Collection<Xref> xrefCollection;
}

外部参照クラス:

public class Xref {
    @Id
    private Integer id;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "xrefId")
    private Collection<Data> dataCollection;
    @JoinColumn(name = "bar_id", referencedColumnName = "id")
    @ManyToOne(optional = false)
    private Bar barId;
    @JoinColumn(name = "foo_id", referencedColumnName = "id")
    @ManyToOne(optional = false)
    private Foo fooId;
}

データクラス:

public class Data {
    @Id
    private Integer id;
    @JoinColumn(name = "xref_id", referencedColumnName = "id")
    @ManyToOne(optional = false)
    private Xref xrefId;
}

すべてのテーブルとインデックスが DB で正しく定義されている場合、このコードはNetBeans によって自動的に生成されます。

于 2013-01-15T18:37:04.083 に答える
0

キスするだけ。idfoobarおよびSet<Data>フィールドを含む別のクラス Xref を作成します。foo2 つのパラメーターを使用して Xref を検索する DAO メソッドを作成し、 bar(単純な HQL で実装します)。一意の要件は、データベース内の一意の制約によって達成できます。

クラス階層だけで表現するのは見栄えが悪いので、DAO を使用した方がよいでしょう。

于 2013-01-15T16:34:33.153 に答える
0

結合テーブル にxrefは追加のidフィールドがあります。JPAでそのようなテーブルを作成できるようにするには、追加のエンティティ クラスが必要です。次に、とXRefの間の関係をマップする必要があります(どちらも 1 対多です)。 . 次に、エンティティ クラスを作成し、との間の関係をマッピングできます。もっと助けが必要ですか?今はコードを提供する時間がありませんが、必要な場合はお尋ねください。できるだけ早く追加できるようにいたします。AXRefBXRefCCXRef

于 2013-01-15T16:34:35.837 に答える