28

我对 Hibernate 真的很陌生。我想要一个List<User>使用休眠标准,但只能填写用户 ID 和名称字段。那可能吗?类似于如下所示的查询:

SELECT user.id, user.name FROM user

问候。

4

3 回答 3

56

这正是预测的用途。这是一个例子:

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

实际上,如果您查看“惰性属性获取”的文档,他们会明确表示:


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


顺便说一下,还有一个你可能也感兴趣的相关问题: Hibernate Query By Example and Projections

于 2009-06-04T21:43:56.657 回答
3

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

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();
于 2014-02-10T19:58:27.160 回答
1

通常,您不想部分加载对象的属性。但是,如果必须,请参阅:

http://docs.jboss.org/hibernate/stable/core/manual/en-US/html/performance.html#performance-fetching-lazyproperties

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

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

http://docs.jboss.org/hibernate/stable/core/manual/en-US/html/querysql.html#d0e17633

于 2009-06-04T14:14:11.653 回答