Hibernate Criteria ResultTransformer - 包含List / Set的bean

时间:2014-10-23 18:05:32

标签: java hibernate criteria projection hibernate-criteria

我有这样的实体:

public class EntityClass{
    private String id;
    private String name;
    private List<OtherEntityClass> others;
}

和这样的bean类:

public class BeanClass{
    private String id;
    private String name;
    private Set<Long> ids;
} 

我尝试使用以下标准获得结果(List<BeanClass>):

Criteria criteria = session.createCriteria(EntityClass.class)
    .createAlias("others", "others", JoinType.LEFT_OUTER_JOIN)
    .setProjection(Projections.projectionList()
        .add(Projections.property("id"), "id")                   // this is OK
        .add(Projections.property("name"), "name")               // this is OK
        .add(Projections.property("others.id"), "others"))       // there is problem
    .setResultTransformer(Transformers.aliasToBean(BeanClass.class));

List<BeanClass> result = criteria.list();

问题是(我认为)hibernate如何将元组赋予Tranformer。 在课程AliasToBeanResultTransformer中,我找到了方法:

public Object transformTuple(Object[] tuple, String[] aliases);

Hibernate正在“给”这样的元组行/数组(方法被执行4次):

第一次调用

  • 1
  • sameName
  • 23

第二次调用

  • 1
  • sameName
  • 24

第3次调用

  • 1
  • sameName
  • 26

第4次调用

  • 1
  • sameName
  • 27

我希望它“给”那里(只有一次调用):

  • 1
  • sameName
  • [23,24,26,27]

有人帮我解决?


我被创建了临时解决方法,但它真的很难看。 (My Own Transformer

0 个答案:

没有答案