7

プロジェクトのデータベースに接続するために休止状態を使用しています。

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

次の hql クエリを試しましたが、成功しませんでした。

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

これは、データの取得元となるデータベースの部分のイメージです。 データベース

SQL クエリで目的の結果が得られましたが、休止状態で動作させることができないようです。しかし、私はこれを 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 クエリの作成方法を教えてもらえますか? ありがとうございました。

4

1 に答える 1

5

以下を試してください:

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

ER図に示されているように、関係Product-Productlanguagesを次のようにマッピングしたと仮定しています。OneToManyProductlanguages-LangagesManyToOne

編集:Productlanguage行のマッピングにタイプミスがあるようです。最後public Languages getLanguages() {barcodeに削除してください。barcode

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

    return this.languages;
}
于 2012-11-06T17:12:51.470 に答える