2012-03-25 3 views
0

würde Ich mag JPA Abfrage erstellen, auf der Grundlage dieser TabellenJPA viele zu einem/einer zu vielen Abfrage

**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 

Ich habe auch eine „tempaltecat“ Tabelle, die Fremdschlüssel für die Kategorie und Vorlage table.I` hält Ich möchte eine Abfrage erstellen, die alle Vorlagen in der Schablonentabelle basierend auf der Kategorie und umgekehrt findet.

Hier ist meine Tabellenzuordnung

@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; 

Vielen Dank im Voraus

Antwort

2

Es sieht aus wie eine @ManyToMany Beziehung,

Statt @OneToMany und @ManyToMany verwenden, können Sie die folgende Konfiguration verwenden :

In Kategorie klasse:

@ManyToMany(cascade = CascadeType.ALL) 
@JoinTable(name = "templatecat", joinColumns = { @JoinColumn(name = "categoryId", unique = true) }, inverseJoinColumns = { @JoinColumn(name = "templateId") }) 
private Set<Template> templates; 

In Template-Klasse:

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

Wenn Sie alle Vorlagen eines bestimmten Kategorie sehen möchten, würde die Abfrage sein:

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

Die Rückseite auch funktioniert (alle Kategorien aus einer Vorlage)

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

Ich hoffe, es hat Ihnen geholfen.

+0

Ich denke, dass meine Beziehung richtig ist, weil eine Kategorie viele Vorlagen haben kann, aber eine Vorlage kann nicht mehr als eine Kategorie haben. Wie auch immer ich denke, dass meine Frage ein wenig unklar war, würde ich gerne alle Vorlagen nach bestimmten Kategorienamen finden . –

+0

also, warum verwenden Sie nicht eine '@ OneToMany' (in der Kategorie) und eine' @ ManyToOne' (in der Vorlage) Beziehung? Auf diese Weise brauchen Sie keine Zwischentabelle und die Abfrage wäre: 'Wählen Sie o.templates aus der Kategorie o, wo o.name =?' – leozin