Hibernate 如何使用条件返回具有选定列的实体

Hibernate 如何使用条件返回具有选定列的实体,hibernate,criteria,Hibernate,Criteria,我对Hibernate很陌生。我想要一个使用hibernate标准的列表,但只需要填写用户id和名称字段。可能吗?类似如下所示的查询: SELECT user.id, user.name FROM user 注意。通常不希望部分加载对象的属性。但如果必须这样做,请看以下内容: 对于类似于普通报告的行为,您可以使用实体查询: sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS").addEntity(Cat.class); 这正

我对Hibernate很陌生。我想要一个使用hibernate标准的
列表
,但只需要填写用户id和名称字段。可能吗?类似如下所示的查询:

SELECT user.id, user.name FROM user

注意。

通常不希望部分加载对象的属性。但如果必须这样做,请看以下内容:

对于类似于普通报告的行为,您可以使用实体查询:

sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS").addEntity(Cat.class);

这正是投影的目的。以下是一个例子:

  Criteria cr = session.createCriteria(User.class)
    .setProjection(Projections.projectionList()
      .add(Projections.property("id"), "id")
      .add(Projections.property("Name"), "Name"))
    .setResultTransformer(Transformers.aliasToBean(User.class));

  List<User> list = cr.list();
Criteria cr=session.createCriteria(User.class)
.setProjection(Projections.projectionList()项目)
.add(Projections.property(“id”),“id”)
.add(Projections.property(“名称”),“名称”))
.setResultTransformer(Transformers.aliasToBean(User.class));
List=cr.List();
事实上,如果您查看有关“惰性属性获取”的文档,它们会明确指出:


“至少对于只读事务而言,避免不必要的列读取的另一种(更好的?)方法是使用HQL或条件查询的投影功能。这避免了构建时字节码处理的需要,当然是首选解决方案。”


顺便说一下,您可能还对一个相关问题感兴趣:

我真的很晚才回答这个问题,但是,您可以向查询对象添加自定义结果转换器,如下所示

Query query = session
        .getNamedQuery(
                "someNamedQueryWhichISHQL")
        .setString("cod", "10")
        .setResultTransformer(new ResultTransformer() {

            public Object transformTuple(Object[] row, String[] arg1) {
                User usr = new User(row[0],row[1]);
                return usr
            }

            public List transformList(List arg0) {

                return arg0;
            }
        });
return query.list();

可以通过HQL查询来完成吗?