如何在JPQL或HQL中仅检索实体的某些字段?JPQL或HQL中的ResultSet等价物是什么?

Dau*_*aud 19 orm hibernate hql jpql

在JPQL中,我可以通过以下方式检索实体:

query = entityManager.createQuery("select c from Category c");
List<Category> categories = query.getResultList();
Run Code Online (Sandbox Code Playgroud)

但是,如果我想检索Category实体的id和name字段(仅),我需要像ResultSet对象这样的东西,通过它我可以说:rs.getString("name")rs.getString("id").如何在JPQL不检索整个实体的情况下完成此操作?

基本上,对于如何从一个查询信息,如:select c.id,c.name from Category c

dim*_*mas 40

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

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

在返回的数组中,1-st元素将是id,second-name.

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

如果要使用hibernate的Criteria API,则应使用Projections.

使用JPA,它将以相同的方式工作:

List<Object[]> rows = entityManager.createQuery(queryString).getResultList();
Run Code Online (Sandbox Code Playgroud)


car*_*tax 11

结果不是使用.list()函数本身List<Object[]>.它是c.id, c.nameHQL查询中fields()的规范.如果您的查询是

    "select c from Category c"
Run Code Online (Sandbox Code Playgroud)

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