2012-03-25 17 views
0

多くの私は、私はまた、カテゴリおよびテンプレートtable.I`の外部キーを保持している「tempaltecat」テーブルを持っているJPA多くの一つに/ 1クエリ

**category**            

(pk)CategoryID int (10) 
category VARCHAR (45)   

**templatecat** 

(pk/fk)templateId int(10)  
(pk/fk)categoryId int (10) 

**template** 

(pk)templateId int (10) 
template madiumtext 

この表に基づくJPAクエリを作成したいですカテゴリに基づいてテンプレートテーブル内のすべてのテンプレートを検索するクエリを作成したり、逆もまた同様です。ここで

が私のテーブルマッピング事前

答えて

2

それは@ManyToMany関係のように見えるで

@Entity 
@Table(name = "category") 
@OneToMany(cascade = CascadeType.ALL) 
@JoinTable(name = "templatecat", joinColumns = { @JoinColumn(name = "categoryId", unique = true) }, inverseJoinColumns = { @JoinColumn(name = "templateId") }) 

private Set<Template> template; 

@Entity 
@Table(name = "template") 
@ManyToOne(optional = true) 
@JoinTable(name = "templatecat", joinColumns = { @JoinColumn(name = "templateId") }, inverseJoinColumns = { @JoinColumn(name = "categoryId") }) 

private Category category; 

おかげで、代わりに@OneToManyおよび@ManyToManyを使用しての

では、次の設定を使用することができます:

カテゴリ内:

テンプレートクラスで

@Entity 
@Table(name = "template") 
@ManyMany(optional = true, mappedBy="templates"); 
private Set<Category> categories; 

指定したカテゴリーのすべてのテンプレートを見たい場合は、クエリは次のようになります。

select o.templates from Category o where o.id = ? 

逆はテンプレートから(だけでなく、すべてのカテゴリーの作品)

select o.categories from Template o where o.id = ? 

希望しています。

+0

私の関係は正しいと思いますが、1つのカテゴリは多くのテンプレートを持つことができますが、1つのテンプレートは複数のカテゴリを持つことはできません。私の質問は少し不明であると思いますが、 。 –

+0

なので、なぜ '@ OneToMany'(カテゴリ内)と' @ ManyToOne'(テンプレート内)の関係を使用しないのですか?このように中間テーブルは必要ありません。クエリは次のようになります: 'o.name =? – leozin

関連する問題