2012-11-06 14 views
6

Ich verwende Hibernate, um eine Verbindung zu meiner Datenbank für ein Projekt herzustellen.HQL Query Join Tabellen

Ich möchte eine Abfrage haben, die die Produkte aus meiner Datenbank mit der Beschreibung und dem Namen in einer bestimmten Sprache erhält. Der Parameter, den ich habe, ist der Kurzname für die Sprache, also müsste ich zuerst die ID der Sprache bekommen und dann den Text in den benötigten Sprachen bekommen.

Ich habe die folgende HQL-Abfrage versucht, ohne Erfolg.

from Products as p 
where p.productlanguages.languages.shortname like 'eng' 

Dies ist ein Bild des Teils der Datenbank, wo die Daten herkommen sollten: database

ich das gewünschte Ergebnis mit einer SQL-Abfrage erhalten habe, aber ich kann nicht scheinen, um es zu bekommen im Winterschlaf arbeiten. Aber ich würde das lieber in hql machen.

SELECT * FROM products p 
INNER JOIN productlanguage pl ON pl.Products_id = p.id 
WHERE pl.Languages_id = 
(
SELECT id FROM languages 
WHERE Shortname = 'eng' 
); 

Kann mir jemand sagen, wie man diese hql-Abfrage erstellt? Danke.

Antwort

5

Versuchen Sie unter:

from Products p INNER JOIN p.productlanguages pl 
    where pl.languages.shortname ='eng' 

Ich gehe davon aus, dass Sie Product-Productlanguages Beziehung als OneToMany und Productlanguages-Langages Beziehung als ManyToOne zugeordnet haben, wie in Ihrem E-R Diagramm dargestellt.

EDIT: Es scheint ein Tippfehler in Productlanguage Mapping in Zeile public Languages getLanguages() {barcode, entfernen Sie die barcode am Ende zu sein.

@ManyToOne(fetch=FetchType.LAZY) 
@JoinColumn(name="Languages_id", nullable=false, insertable=false, updatable=false) 
public Languages getLanguages() {barcode 

    return this.languages; 
} 
+0

Das funktioniert, aber jetzt kann ich das Ergebnis nicht in ein Set setzen. – Jerodev

+0

@Jerodev: Dies sollte 'List ' mit eindeutigen Produkteinheiten zurückgeben. –

+0

Dies ist der Code für mein Modell: [http://pastebin.com/8aM5eKYx](http://pastebin.com/8aM5eKYx). Jedes Mal, wenn ich die von Ihnen angegebene Abfrage ausprobiere, erhalte ich die Fehlermeldung "Methode [getBarcode] kann nicht mit [0] Parametern gefunden werden". – Jerodev