2012-11-06 18 views
6

私は、プロジェクト用にデータベースに接続するために休止状態を使用しています。HQLクエリ結合表

特定の言語のディスクリプションと名前を使用してデータベースから製品を取得するクエリがあります。私が持っているパラメータは言語の短い名前なので、最初にその言語のIDを取得し、必要な言語でテキストを取得する必要があります。

私は以下のhqlクエリを試してみましたが、成功しませんでした。

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

これは、データから来るべきデータベースの一部の画像です:私は、SQLクエリで望ましい結果を持っているが、私はそれを得るように見えることはできません database

休止状態で働く。しかし、私は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' 
); 

誰でもこのhqlクエリを作成する方法を教えてください。 ありがとうございます。

答えて

5

は、以下試してみてください。

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

を私はあなたがあなたのE-R図に示されているようManyToOneとしてOneToManyProductlanguages-Langages関係としてProduct-Productlanguages関係をマッピングしていると仮定しています。

EDIT:public Languages getLanguages() {barcodeProductlanguageマッピングにタイプミスがあるようです、最後にbarcodeを削除します。

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

    return this.languages; 
} 
+0

これは機能しますが、結果はにできません。 – Jerodev

+0

@Jerodev:これは、一意のプロダクトエンティティを持つ 'List 'を返すべきです。 –

+0

これは私のモデルのコードです:[http://pastebin.com/8aM5eKYx](http://pastebin.com/8aM5eKYx)。私があなたが提供したクエリを試すと、「[0]パラメータでメソッド[getBarcode]を見つけることができません」というエラーが表示されます。 – Jerodev