3

Hibernateでネイティブクエリを実行して結果セットを取得する必要があります。EntityManagerを使用していますが、queryとresultSetがエンティティではない可能性があります。

ListのResultSetを取得する必要があります。選択出力が変化する可能性があるため(動的に読み取る)、SqlResultSetMappingを使用できません。

以下のコードを試してみると、結果が得られました。私が要求しているのは単一の価値のある結果だからです。(Hibernate JPA)

Query query = manager.createNativeQuery("select name from fresher_test where id=1");
List<Object> amount = query.getResultList();

if(amount == null)
 {
    System.out.println("Hey its a null");
    return;
 }
 for(Object e : arr)
 {
   System.out.println(e.toString());
 }

出力は:アリス

選択名としてクエリを使用して同じコードから複数の選択を取得しようとしたとき、id=1であるfresher_testからの指定

出力は次のとおりです:[Ljava.lang.Object; @ 8b1a4f

オブジェクト。このオブジェクトからフィールドを取得するにはどうすればよいですか。オブジェクトe(List l =(List)e;)をリストに型キャストしようとしましたが、java.lang.ClassCastExceptionをスローします:java.lang.Stringをjava.util.Listにキャストできません。

これは、リストまたは配列の値を取得する方法がありますか?

注:結果は動的である可能性があるため、結果クラス/エンティティを使用できません。

4

4 に答える 4

16

複数の列をフェッチすると、結果は。になりList<Object[]>ます。それぞれObject[]に行の1つの列が含まれます。したがって、あなたの場合、それぞれObject[]に2つの要素が含まれ、最初の要素は名前で、2番目の要素は指定です。

getResultList()nullを返すことは決してないことに注意してください。あなたはそれをチェックするべきではありません。

于 2012-07-16T10:49:48.137 に答える
2

JPA 2.0、カスタムBeanで結果が必要な場合:

特定のコンストラクターでBeanを作成する

package my.package;
public class MyBean{
...
    public MyBean(Long id, String desc, Long id2)

次に、エンティティoマッピングで、このような名前付きクエリを作成します

@NamedQuery(name = "myNamedQuery", 
    query = "select new my.package.MyBean(e.idSomething, e.description, e.secondId) 
             from DBEntity e")
于 2014-01-30T22:38:05.383 に答える
2

あなたは以下を使うことができます

NativeQueryImpl nativeQuery = (NativeQueryImpl) query; 

nativeQuery.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE); 
    List<Map<String,Object>> result = nativeQuery.getResultList();
于 2017-06-26T15:44:03.620 に答える
-1

私は同じ問題に直面していました、そしてここでそれを解決する方法:

List<User> records = entityManager.createNamedQuery("latestStatusByUser").getResultList();
List<User> userRecords = new ArrayList<User>();
Iterator it = records.iterator( );

while (it.hasNext( )) {
    Object[] result = (Object[])it.next(); // Iterating through array object 

    userRecords.add(new User(result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7]));

    }
于 2014-09-24T06:42:34.513 に答える