0

jpaで遊ぶのは2回目です。

私はこのコードを書きました:

   String queryString = "SELECT e.uidprofile, e.profilecode, e.catUso, max(e.zonaClim), e.classePrev, e.beta1, e.beta2, e.beta3, e.beta4"
            + " FROM "
            +  entityClass.getSimpleName()
            + " e "
            + " WHERE e.catUso like :code "
            + " group by e.uidprofile, e.profilecode, e.catUso, e.classePrev, e.beta1, e.beta2, e.beta3, e.beta4"
            + " order by e.uidprofile";

    Query query = entityManager.createQuery(queryString);

    query.setParameter("code", "C" + "%");

    List<SamTbProfileMapping> resultList = query.getResultList();

    ClassLoader c1 = this.getClass().getClassLoader();
    ClassLoader c2 = resultList.getClass().getClassLoader();

    if(resultList.size()>0){
        System.out.println(resultList.get(0).getCatUso());
    }

デバッグ:

  • resultListのすべてのフィールドがSamTbProfileMapping適切な値である
  • オブジェクトの数は正しいです
  • 行の後で、 resultListをキャストできないと言ってList<SamTbProfileMapping> resultList = query.getResultList(); いますC2nullSystem.out.println(resultList.get(0).getCatUso());SamTbProfileMapping
4

2 に答える 2

2

型付きバージョンのcreateQuery関数(1.6から利用可能)を使用する必要があると思います

試す:

Query query = entityManager.createQuery(queryString, SamTbProfileMapping.class);

もちろん、これSamTbProfileMappingはエンティティクラスでなければならないことを意味します。また、集計列についてはよくわかりません。エイリアスを適用する必要があるかもしれません。

于 2012-11-08T10:30:21.977 に答える
2

クエリを使用して配列のリストを取得しています。オブジェクトのリストではありません。

"Select a, b, c, d, from something"- 戻り値List<Object[]>

次に、クエリと同じ順序で個別のメンバーにアクセスします。例えば:

 List<Object[]> myList = query.getResultList();

 MyAClass a1 = (MyAClass) myList.get(0)[0];
 MyBClass b1 = (MyBClass) myList.get(0)[1];

オブジェクトリストを選択するには、次を使用できます。

"select a from MyClass a where ..."

それで

 List<MyClass> myList = query.getResultList();
 MyClass result1 = myList.get(0);
于 2012-11-08T10:30:32.320 に答える