2011-09-12 4 views
0

2つのクラスProductProductTranslationと仮定します。この製品のプロパティはProduct.Titleであり、これはProductTranslationのセットです。 2つの言語を使用している場合(例: ende私のシステムでは、Product.Titleのセットは、製品ごとに2つのエントリを保持します。特定の言語に基づいて一連の翻訳を注文します

特定の言語で注文された製品のリストを返すHQLを作成する方法はありますか? en?または、この種のソートは、メモリ内のDBアクセス後にのみ可能です。 Linqまたは任意のコンパレータと?

任意のアイデアのThx! sl3dg3

編集:注文にもかかわらず、私はまだProductTranslationのセット全体を受け取りたいと思います。

答えて

0

を使用することができ容疑者、HQLのドキュメントを見にダブルジョイン:

FROM Product AS product 
INNER JOIN FETCH product.Translations ordered_trans 
INNER JOIN FETCH product.Translations trans 
WHERE ordered_trans.language = 'en' 
ORDER BY ordered_trans.Title ASC 
0

特定のカルチャーを使用して注文することであるか、一致する翻訳に従って単純な注文をすることであるかは明確ではありません。後者の場合は、結合のように聞こえるだけです。あなたはNHibernateのにLINQを使用することができた場合は、(...私は同等のHQLがどうなるか分からないが、私はHQLのハンドルが問題なく参加すると確信している

string language = "en"; 
var query = from product in db.Product 
      join translation in db.ProductTranslation 
            .Where(t => t.Language == language) 
       on product.Id equals translation.productId 
      orderby translation.Title 
      select new { Product = product, translation.Title }; 

:LINQでそれはようなものになるだろうそれはあまりにも当然罰金、それを処理する必要があります)

EDIT:それはで行うことができます:ちょうど私は可能な解決策を考え出した私あなたが

from Product as product 
inner join fetch product.Translations translation 
where translation.language = 'en' 
order by translation.title asc 
+0

は、特定の培養物による秩序化を意味する。私が英語を打つと、私は英語の翻訳に従って、そうでなければドイツのものに従ってタイトルを注文したいと思います。はい、linqで問題はありませんが、HQLでどのように動作するのか、私はまだ心配していません。 – sl3dg3

+0

@ sl3dg3:いいえ、私は文化についての私の意見を逸してしまったと思います。異なる文化は同じ言葉を別々に注文します。いくつかのHQLを試してみましょう。 –

+0

@ Jon:そうです、文化はもちろん問題です。しかし、単純化のために、それは文化不変の順序にする必要があります。あなたの例として、私は1つの重要な点を概説しませんでした:私は言語のセット全体を受け取りたいです。その場合、私は英語のみを受け取ります。また、もう一つ重要な点は、「ProductTranslation」にマップされたバックリファレンスがないことです。私はこの2つのキーポイントが不可能だと思う... – sl3dg3

関連する問題