2016-05-03 15 views
1

を使用して、私は "ExampleEntity" のカウント数を取得するには、次のコードを書い選択します"SELECT COUNT(*)を..." CriteriaQuery

:EXAMPLEENTITYからcol_0_0_は(Oracle 11gのデータベースを使用して)パフォーマンス上の理由から、私は、次のSQLを生成する必要があり、

をexampleen0_しかしとして(をexampleen0_.id)カウントEXAMPLEENTITYからcol_0_0_それはJPQLクエリの作成を行うには非常に簡単ですが、私はフィルタのための既存のコードの多くを書き換えなければならないだろう

をexampleen0_として SELECT COUNT(*):

は、SQLを希望します。

CriteriaQueryを使用して「カウント(exampleen0_.id)」ではなく「カウント(*)」を生成するにはどうすればよいですか?

答えて

0

Hibernateによって生成されたSQLを強制的に手に入れることは非常に困難です。代わりに、ネイティブクエリを書くことを検討します。

Query query = entityManager.createNativeQuery(
     "SELECT COUNT(*) FROM EXAMPLEENTITY", Long.class); 
return query.getSingleResult(); 

注:より複雑なロジックを使用した場合ネイティブクエリが乱雑得ることができますが、この特定の1は、ANSI規格に準拠し、任意のDB固有の心配することなく、任意の一般的に使用されるDBに対して問題なく実行する必要があります構文の問題。

+0

正しい、それはJPQLクエリのように、代わりのだ...しかし、私は説明で述べたように私は、フィルタリングのために既存のコードのLOTEを書き換えなければならないだろう...オラクルに動作します – vduk225

0

それは

BigDecimal count = (BigDecimal) manager.createNativeQuery(query).getSingleResult();