25

JPQLでは、次の方法でエンティティを取得できます。

query = entityManager.createQuery("select c from Category c");
List<Category> categories = query.getResultList();

ただし、Categoryエンティティのidフィールドとnameフィールド(のみ)を取得する場合は、オブジェクトのようなものが必要です。これを使用して、:とResultSetを言うことができます。エンティティ全体を取得せずに、を介してこれを行う方法は?rs.getString("name")rs.getString("id")JPQL

基本的に、次のようなクエリから情報を取得する方法については、次のようになりますselect c.id,c.name from Category c

4

4 に答える 4

47

HQLでは、list()関数を使用して、結果行を含むObject[]配列のリストを取得できます。

Query query = session.createQuery("select c.id,c.name from Category c");
List<Object[]> rows = query.list();

返される配列では、最初の要素はid、2番目はnameになります。

for (Object[] row: rows) {
    System.out.println(" ------------------- ");
    System.out.println("id: " + row[0]);
    System.out.println("name: " + row[1]);
}

hibernateのCriteriaAPIを使用する場合は、Projectionsを使用する必要があります。

JPAを使用すると、同じように機能します。

List<Object[]> rows = entityManager.createQuery(queryString).getResultList();
于 2012-08-04T10:23:20.617 に答える
12

.list()結果をaにするのは、関数自体の使用ではありませんList<Object[]>c.id, c.nameこれは、HQLクエリのフィールド( )の指定です。クエリが

    "select c from Category c"

次にquery.list()、オブジェクトを返しList<Category>ます。

于 2012-08-04T18:20:04.977 に答える
2

クラスに直接マップすることもできます

public class UserData {

    private String name;
    private Date dob;
    private String password;
//setter
}



  public UserData getUserData() {
        String queryString = "select user.name as name, user.dob as dob, user.userses.password as password from UserProfile user where user.userEmailId='faiz.krm@gmail.com'";
        Query query = sessionFactory.getCurrentSession().createQuery(queryString);
        query.setResultTransformer(Transformers.aliasToBean(UserData.class));
        return query.uniqueResult();
    }
于 2018-09-23T15:32:48.343 に答える
0

JPA仕様により、オブジェクト指向の方法で結果をカスタマイズできます。

あなたがこのリンクで見つけることができるより多くの情報

さらにエレガントな 方法があります

于 2020-10-31T11:37:15.470 に答える