Hibernate 如何在JPQL或HQL中仅检索实体的某些字段?在JPQL或HQL中,ResultSet的等价物是什么?
在JPQL中,我可以通过以下方式检索实体:Hibernate 如何在JPQL或HQL中仅检索实体的某些字段?在JPQL或HQL中,ResultSet的等价物是什么?,hibernate,orm,hql,jpql,Hibernate,Orm,Hql,Jpql,在JPQL中,我可以通过以下方式检索实体: query = entityManager.createQuery("select c from Category c"); List<Category> categories = query.getResultList(); query=entityManager.createQuery(“从类别c中选择c”); 列表类别=query.getResultList(); 但是,如果我希望检索类别实体的id和name字段(仅),我需要类似
query = entityManager.createQuery("select c from Category c");
List<Category> categories = query.getResultList();
query=entityManager.createQuery(“从类别c中选择c”);
列表类别=query.getResultList();
但是,如果我希望检索类别实体的id和name字段(仅),我需要类似于ResultSet
对象的东西,通过它我可以说:rs.getString(“name”)
和rs.getString(“id”)
。如何通过JPQL
执行此操作,而不检索整个实体
基本上,对于如何从查询中检索信息,如:从类别c中选择c.id、c.name
?在HQL中,可以使用list()函数获取包含结果行的Object[]数组列表:
Query query = session.createQuery("select c.id,c.name from Category c");
List<Object[]> rows = query.list();
如果要使用hibernate的CriteriaAPI,应该使用
对于JPA,它将以同样的方式工作:
List<Object[]> rows = entityManager.createQuery(queryString).getResultList();
List rows=entityManager.createQuery(queryString.getResultList();
不是使用.list()
函数本身使结果成为列表
。它是HQL查询中字段(c.id,c.name
)的规范。如果你的问题是
"select c from Category c"
然后
query.list()
将返回一个list
对象。您也可以直接映射到该类
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();
}
JPA规范允许我们以面向对象的方式定制结果。 更多信息可以在这里找到
在JPA书籍中,我经常看到类似“从c类中选择c.id、c.name”这样的查询,但它们从不告诉你如何检索结果。有没有不特定于Hibernate的方法可以做到这一点?对于JPA,它的工作方式也是一样的。我在回答中加了一个例子。但是请注意,例如,如果您只选择名称列,那么您将得到列表,而不是列表。在这个上下文中,
session
变量是什么org.hibernate.Session
没有createQuery
方法,至少在4.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();
}