在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
?
在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();
这是不使用的.list()
函数本身,这使得结果的List<Object[]>
这是场(的规范c.id, c.name
在HQL查询)。 如果您的查询是
"select c from Category c"
然后query.list()
将返回一个List<Category>
对象。
您也可以直接映射到类
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?