2012-02-09 16 views
0

私はHibernate、struts、extjsを使ってWebアプリケーションを開発しています。 これは私のシナリオです。私の製品テーブルでhtmlでdistinctを使用する方法

String hql = "from product"; 

3つの列されているが、ID、名前、セクション

私は、製品の明確な名前に基づいて結果を必要とするが、私は唯一のオプションはHQLあり、他のオプションを書いていないしています。

は私がして、グループを使用することができますが、私は同じ方法を使用するすべてのDAOである一般的な方法であるので、私はコード上の私のコードでは

hql.list().get(0);を使用していた結果

のサイズを必要とします。

私はジョインを使うことができますが、データは何百万もあるので、クエリの実行は遅すぎます どのようにしてhqlにdistinctキーワードを書くことができますか?

+0

。あなたは何をすべきか選択したいですか?別個の製品名の数? –

+0

別の製品名を持つ製品データが必要ですが、主キーIDには異なる値があります。これらの値を無視する必要があります。私がデータを取得した場合、私は自動的に数を取得します – Bindu

答えて

0

ここでは、私たちが使用するhqlのスニペットを示します。それは、HQLで「明確な」キーワードはSQLで「明確な」キーワードに直接マッピングしないことは注目に値します

String queryString = "select distinct f from Foo f inner join foo.bars as b" + 
       " where f.creationDate >= ? and f.creationDate < ? and b.bar = ?"; 
     return getHibernateTemplate().find(queryString, new Object[] {startDate, endDate, bar}); 

(名前はアイデンティティを保護するために変更されています)。

HQLで "distinct"キーワードを使用すると、時にはHibernateが別個のSQLキーワードを使用しますが、場合によっては結果トランスフォーマを使用して別個の結果を生成します。あなたが外を使用しているたとえば、次のように参加:

が左o.lineItems

この場合、SQLレベルでの重複を除外することはできませんをフェッチ参加O、注文からO明確な選択にHibernateので、 resultTransformerを使用して、SQLクエリが実行された後に重複をフィルタリングします。

+0

私は同じテーブルで別名を使用する必要がありますが、プライマリキーIDは異なる値を持っています私はプライマリキー値を無視したい、私はちょうど製品の別個の値名前は重複しているため私はこのようなクエリを使用しています製品pから別のpを選択しているが、すべてのレコードを表示したいのですが、製品pのようなクエリが必要です(ここではdistinct(p.name)は休止状態ではありませんがこのタイプが必要です) – Bindu

+0

レスポンスjramay – Bindu

0

Distinctフィールドを使用するためのHibernate Query Languageの回答があります。 を使用できます。 SQLクエリを使用すると、String Listが返されます。エンティティクラスではそれを返すことはできません。したがって、そのタイプの問題を解決する答えはSQLを使用するHQLです。

」(FLIGHT_ROUTE SF GROUP BY SF.TO_CITY FROM SELECT SF.ROUTE_ID)F.ROUTE_ID
INはFLIGHT_ROUTE F FROM

;

SQLクエリステートメントから、それがリストとしてDISTINCT ROUTE_IDと入力しました。そして、IN(一覧)からのクエリフィルタでDISTINCT TO_CITY。

戻り値の型は、エンティティBeanのタイプである。あなたの質問は明らかではないが、あなたがそのようなAutoComplementとしてAJAXでそれことができるように。

関連する問題