2012-11-06 12 views
6

Używam hibernacji do łączenia się z bazą danych dla projektu.Zapytanie HQL do łączenia tabel

Chciałbym mieć zapytanie, które pobiera produkty z mojej bazy danych z opisem i opisem w pewnym języku. Parametr, który mam, to krótka nazwa języka, więc najpierw musiałbym uzyskać identyfikator języka, a następnie uzyskać tekst w wymaganych językach.

Próbowałem następujące kwerendy hql, bez powodzenia.

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

To jest obraz z części bazy danych, gdzie dane powinny pochodzić z: database

Mam pożądany wynik z zapytania SQL, ale nie wydaje się uzyskać go pracować w hibernacji. Ale wolałbym to zrobić w hql.

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' 
); 

Czy ktoś może mi powiedzieć, jak zbudować kwerendę hql? Dziękuję.

Odpowiedz

5

Spróbuj poniżej:

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

jestem przy założeniu, że odwzorowany Product-Productlanguages związek jako OneToMany i Productlanguages-Langages związek jako ManyToOne jak przedstawiono na diagramie E-R.

EDIT: Wydaje się, że to literówka w Productlanguage mapowania na linii public Languages getLanguages() {barcode, usuń barcode w końcu.

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

    return this.languages; 
} 
+0

Działa to, ale teraz nie mogę umieścić wyniku w zestawie . – Jerodev

+0

@Jerodev: Powinno to zwrócić 'List ' z unikalnymi jednostkami produktu. –

+0

To jest kod dla mojego modelu: [http://pastebin.com/8aM5eKYx](http://pastebin.com/8aM5eKYx). Za każdym razem, gdy próbuję podanego zapytania, pojawia się komunikat "Nie można znaleźć metody [getBarcode] z parametrami [0]". – Jerodev

Powiązane problemy