5

HibernateHQLの質問があります。サブクエリを派生テーブルとして記述したいと思います(パフォーマンス上の理由から)。HQLでそれを行うことは可能ですか?例:

FROM Customer WHERE country.id in 
(SELECT id FROM (SELECT id FROM Country where type='GREEN') derivedTable)

(ところで、これは単なるサンプルクエリなので、書き直しについてアドバイスを与えないでください。私が興味を持っている派生テーブルの概念にすぎません)

4

2 に答える 2

2

残念ながら、いいえ、派生テーブルは現在HQLでは機能しません。たとえば、次のように機能します。

List<int> result =
  nHSession.CreateQuery( @"select distinct Id from User u")
  .List<int>().ToList();

...以下はこの例外をスローします: タイプ'Antlr.Runtime.NoViableAltException'の例外がスローされました。行1、列24の近く[(S2.BP.Model.User uからuを選択)から個別のIDを選択]

List<int> result = nHSession.CreateQuery(
    @"select distinct Id from (select u from User u)")
    .List<int>().ToList();

フォールバックは、raw sqlを含む名前付きクエリを作成するか、ストアドプロシージャを作成して、次のように名前付きクエリを介して呼び出すことです。

List<int> result = nHSession.GetNamedQuery("spUserIds")
    .SetInt32("id", 3)
    .List<int>().ToList();
于 2010-04-09T22:58:52.687 に答える
1

派生プロパティとパフォーマンスに関する考慮事項に関する情報は、 http://blog.eyallupu.com/2009/07/hibernate-derived-properties.html の私のブログで見つけることができます。

それが役に立てば幸いです,
Eyal Lupu

于 2010-06-12T07:28:52.633 に答える