web-dev-qa-db-ja.com

JPQLまたはHQLでエンティティの特定のフィールドのみを取得する方法は? JPQLまたはHQLのResultSetと同等のものは何ですか?

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

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

ただし、CategoryエンティティのIDフィールドと名前フィールド(のみ)を取得する場合は、rs.getString("name")およびrs.getString("id")。エンティティ全体を取得せずにJPQLを介してこれを行う方法は?

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

19
Daud

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

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

返される配列では、1-st要素はid、second-nameになります。

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

HibernateのCriteria APIを使用する場合は、 Projections を使用する必要があります。

JPAでも同じように機能します。

List<Object[]> rows = entityManager.createQuery(queryString).getResultList();
39
dimas

結果を_List<Object[]>_にするのは、.list()関数自体の使用ではありません。 HQLクエリのフィールド(_c.id, c.name_)の仕様です。クエリが

_    "select c from Category c"
_

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

11
carbontax

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

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='[email protected]'";
        Query query = sessionFactory.getCurrentSession().createQuery(queryString);
        query.setResultTransformer(Transformers.aliasToBean(UserData.class));
        return query.uniqueResult();
    }
1
Faiz Akram