web-dev-qa-db-fra.com

Comment récupérer uniquement certains champs d'une entité en JPQL ou HQL? Quel est l'équivalent de ResultSet en JPQL ou HQL?

En JPQL, je peux récupérer des entités en:

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

Mais si je souhaite récupérer les champs id et name (uniquement) de l'entité Category, j'ai besoin de quelque chose comme l'objet ResultSet, à travers lequel je peux dire: rs.getString("name") et rs.getString("id"). Comment faire cela avec JPQL, sans récupérer l'entité entière?

Fondamentalement, comment récupérer des informations à partir d’une requête telle que: select c.id,c.name from Category c?

16
Daud

Dans HQL, vous pouvez utiliser la fonction list () pour obtenir une liste du tableau Object [] contenant les résultats:

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

dans le tableau retourné, le premier élément sera id, second - name.

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

Si vous souhaitez utiliser l'API Criteria de hibernate, vous devez utiliser Projections .

Avec JPA, cela fonctionnera de la même manière:

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

Ce n'est pas l'utilisation de la fonction .list() elle-même qui rend le résultat List<Object[]>. C'est la spécification des champs (c.id, c.name) dans la requête HQL. Si votre requête est

    "select c from Category c"

Ensuite, query.list() renverra un objet List<Category>.

10
carbontax

Vous pouvez également mapper directement à la classe

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();
    }
0
Faiz Akram