一尘不染

如何仅检索JPQL或HQL中实体的某些字段?JPQL或HQL中的ResultSet等效于什么?

hibernate

在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


阅读 223

收藏
2020-06-20

共1个答案

一尘不染

在HQL中,可以使用list()函数获取包含结果行的Object []数组的列表:

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

返回数组中的第一个元素将是id,第二个-名称。

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();
2020-06-20