如何检索JPQL或HQL一个实体的某些领域? 什么是结果集的JPQL或HQL等价?(How to

2019-06-26 18:11发布

在JPQL,我可以通过检索实体:

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

但是,如果我要检索的实体类的id和name字段(只),我需要的东西喜欢ResultSet对象,通过它我可以说: rs.getString("name")rs.getString("id") 。 如何通过做这个JPQL ,而无需检索整个实体?

基本上,对于如何检索像查询的信息: select c.id,c.name from Category c

Answer 1:

在HQL你可以使用list()函数来获取包含结果行对象[]数组列表:

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

在返回的数组1-ST元件将ID,第二 - 名称。

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

如果你想使用Hibernate的标准API,你应该使用预测 。

随着JPA将同样的方式工作:

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


Answer 2:

这是不使用的.list()函数本身,这使得结果的List<Object[]> 这是场(的规范c.id, c.name在HQL查询)。 如果您的查询是

    "select c from Category c"

然后query.list()将返回一个List<Category>对象。



Answer 3:

您也可以直接映射到类

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


文章来源: How to retrieve only certain fields of an entity in JPQL or HQL? What is the equivalent of ResultSet in JPQL or HQL?