Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 如何在JPQL或HQL中仅检索实体的某些字段?在JPQL或HQL中,ResultSet的等价物是什么?_Hibernate_Orm_Hql_Jpql - Fatal编程技术网

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

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字段(仅),我需要类似

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

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