How to retrieve only certain fields of an entity in JPQL or HQL? What is the equivalent of ResultSet in JPQL or HQL?

后端 未结 4 798
名媛妹妹
名媛妹妹 2020-12-14 02:02

In JPQL, I can retrieve entities by :

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


        
相关标签:
4条回答
  • 2020-12-14 02:39

    It is not the use of the .list() function itself which makes the result a List<Object[]>. It is the specification of fields (c.id, c.name) in the HQL query. If your query is

        "select c from Category c"
    

    Then query.list() will return a List<Category> object.

    0 讨论(0)
  • 2020-12-14 02:53

    You can also directly map to the class

    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();
        }
    
    0 讨论(0)
  • 2020-12-14 02:56

    In HQL you can use list() function to get a list of Object[] array that contains result rows:

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

    in returned array 1-st element will be id, second - name.

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

    If you want to use hibernate's Criteria API, you should use Projections.

    With JPA it will work the same way:

    List<Object[]> rows = entityManager.createQuery(queryString).getResultList();
    
    0 讨论(0)
  • 2020-12-14 02:59

    The JPA specification allows us to customize results in an object-oriented fashion.

    More information you can find at this link

    There is an even more elegant way

    0 讨论(0)
提交回复
热议问题