2011-08-05 6 views
0

私はページと呼ばれるオブジェクトとタグと呼ばれる別のオブジェクトを持つシナリオを持っていますが、これらの2つの関係はページにタグ(多対多)ですが、同じタグをProduct同じ商品にタグが付いている関係(多対多)もあります。JPA共有エンティティマッピング

通常のシナリオでは、typeはEnum値(製品、ページ)であり、parent_id = page_idとtype = pageのタグからのSELECT *のようなクエリを使用するTagの型列を作成します。私はあなたが団体の2つのテーブルを作成するべきだと思いますどのようにJPAでこれを行うには(この関係とどのようにデータを照会するための作成方法)

+1

質問を使用する:ページ - >タグの関係が1である場合多くの場合、同じタグを複数のページに使用することはできず、同じことが商品に適用されます。これはあなたが望む行動ですか? – Augusto

+0

ああ、多くのことをたくさん残して、私は自分の質問を編集します –

答えて

0

。ページをタグと関連付け、1つはタグと商品を関連付けるものです。コード:

@Entity 
@Table(name = "page") 
class Page { 
    .... 

    @OneToMany 
    @JoinTable(name = "jnd_pages_tags", joinColumns = @JoinColumn(name = "page_fk"), 
      inverseJoinColumns = @JoinColumn(name = "tag_fk")) 
    private Set<Tag> tags;  
} 

@Entity 
@Table(name = "page") 
class Product { 
    .... 

    @OneToMany 
    @JoinTable(name = "jnd_products_tags", joinColumns = @JoinColumn(name = "products_fk"), 
      inverseJoinColumns = @JoinColumn(name = "tag_fk")) 
    private Set<Tag> tags;  
} 

@Entity 
@Table(name = "tags") 
class Tag { 
..... 
} 

は、

SELECT p.t FROM Page p WHERE p.id = :id 

は、製品の対応するタグを選択するために使用し、ページの対応するタグを選択し

SELECT p.t FROM Product p WHERE p.id = :id 
+0

タグで検索する場合は、そのタグに関連する商品やページを返す必要がありますが、後で2つのテーブルを検索する必要がありますタグを付けることができるオブジェクトは、タグで検索する際に複雑になります。 –

+0

私はむしろ継承を使用します。タグとIDのセットを含む@MappedSuperclass TagContainer、feを作成できます。このようにして 'SELECT t FROM TagContainer t JOIN t.tags tag WHERE tag.id =:tagId'のようなものを使うことができます –

関連する問題