How to return an entity with chosen columns using Criteria

前端 未结 3 950
感动是毒
感动是毒 2020-12-13 13:51

I\'m really new with Hibernate. I want a List using hibernate criteria, but only with fields User id and name filled up. Is that possible? Something

相关标签:
3条回答
  • 2020-12-13 14:17

    This is exactly what projections are for. Here is an example:

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

    In fact, if you look at the documentation for "lazy property fetching" they specifically say:


    "A different (better?) way to avoid unnecessary column reads, at least for read-only transactions is to use the projection features of HQL or Criteria queries. This avoids the need for buildtime bytecode processing and is certainly a preferred solution."


    By the way, there is a related question that you may also be interested in: Hibernate Query By Example and Projections

    0 讨论(0)
  • 2020-12-13 14:18

    Typically you don't want to partially load the properties of an object. But if you must, see this:

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

    For plain reporting-like behaviour you could use entity queries:

    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

    0 讨论(0)
  • 2020-12-13 14:40

    I'm really late answering this, but, you can add a custom result transformer to the Query object like below.

    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();
    
    0 讨论(0)
提交回复
热议问题