2012-11-06 20 views
6

Sto utilizzando la modalità di sospensione per connettersi al mio database per un progetto.Tabelle join query HQL

Mi piacerebbe avere una query che preleva i prodotti dal mio database con la descrizione e il nome in una certa lingua. Il parametro che ho è il nome breve per la lingua, quindi prima dovrei ottenere l'id della lingua e quindi ottenere il testo nelle lingue richieste.

Ho provato la seguente query hql, senza successo.

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

Questa è l'immagine della parte del database dove i dati devono provenire da: database

ho ottenuto il risultato desiderato con una query SQL, ma io non riesco a farlo lavorare in letargo. Ma preferirei farlo in 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' 
); 

Qualcuno potrebbe dirmi come creare questa query hql? Grazie.

risposta

5

Prova di seguito:

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

Io parto dal presupposto che hai mappato Product-Productlanguages rapporto come OneToMany e Productlanguages-Langages rapporto come ManyToOne come illustrato nel diagramma E-R.

EDIT: Sembra che ci sia un errore di battitura nel Productlanguage mappatura a linea public Languages getLanguages() {barcode, rimuovere il barcode alla fine.

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

    return this.languages; 
} 
+0

Questo funziona, ma ora non riesco a mettere il risultato in un Set . – Jerodev

+0

@Jerodev: restituisce 'Elenco ' con entità prodotto uniche. –

+0

Questo è il codice per il mio modello: [http://pastebin.com/8aM5eKYx](http://pastebin.com/8aM5eKYx). Ogni volta che provo la query che hai fornito, ricevo un errore che dice "Impossibile trovare il metodo [getBarcode] con [0] parametri". – Jerodev