【问题标题】:How to return an entity with chosen columns using Criteria如何使用条件返回具有选定列的实体
【发布时间】:2010-10-31 08:17:50
【问题描述】:

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

SELECT user.id, user.name FROM user

问候。

【问题讨论】:

    标签: hibernate criteria


    【解决方案1】:

    我真的很晚才回答这个问题,但是,您可以将自定义结果转换器添加到 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();
    

    【讨论】:

      【解决方案2】:

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

      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

      【讨论】:

        【解决方案3】:

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

          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

        【讨论】:

        • 是否可以通过 HQL 查询来实现?
        猜你喜欢
        • 2014-08-25
        • 2015-06-13
        • 1970-01-01
        • 2021-11-08
        • 2023-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多