2016-03-28 11 views
2

JPAネイティブクエリを使用して単一のオブジェクトを取得するにはどうすればよいですか。私はいくつかの研究をしましたが、答えはすべて「getSingleResult」ですが、得たいものは返されませんでした。たとえば、私は自分のデータベースにテーブルのカウントを取得し、Integerにフェッチする場合はどうすればよいですか?JPAネイティブクエリで単一オブジェクトを取得

以下このコードは、私が休止状態Sessisonを使用してこれを取得する方法を示しています。

int check = Integer.parseInt((String) sessionF.createSQLQuery("select to_char(count(*)) as count from user_tables where table_name upper('TEST')").uniqueResult()); 

そして、何私はJPAで細かいことを願っています:

明らか
int check = Integer.parseInt((String) getEntityManager().createNativeQuery("select to_char(count(*)) as count from user_tables where table_name upper('TEST')").getSingleResult()); 

、コードが何を返しません。が欲しいです。したがって、この問題に対処するために私を助けてください。ありがとうございました ! JPAで

+0

JPQLを使用できるクエリのようです... –

答えて

2

あなたが編集した

int num = ((Number)this.entityManager.createNativeQuery("select count(*) from your_table_name") 
       .getSingleResult()).intValue(); 

を次のように実行する必要があります。

String name = this.entityManager.createNativeQuery("select t.name from your_table_name t limit 1").getSingleResult().toString(); 

あなたはnum個のオブジェクトのは、あなたに役立つ

希望でカウントましたでしょう。

+0

こんにちは、ありがとう、返信ありがとうございます。これは正しい結果を返します。しかし、私が望むのは、私がデータベースから照会するオブジェクトの価値を得る方法です。私はオブジェクトを取得する場合はどうすればよいですか: "名前をtable_testから選択するid = 1"。 – minh

+0

私の編集された答えを見てください、あなたのポイントを得ることを望みます。 –

+0

あなたは私の編集した答えのようにする必要があります * String name = this.entityManager.createNativeQuery( "あなたのテーブル名からt 1を選択してください")getSingleResult()。toString(); * –

1

複数の選択式を持つネイティブクエリの場合は、Object[](またはList<Object[]>)を返します。

あなたの要件に応じて、以下のサンプルコードを使用することができます。

Query q = em.createNativeQuery("SELECT id,name FROM user WHERE id = ?1"); 
q.setParameter(1, userId); 
Object[] result = (Object[])q.getSingleResult(); 
String id= result[0]; 
int name = result[1]; 

Arrayの値をタイプキャストする必要があります。

関連する問題