package org.hibernate.transform; final public class Transformers { private Transformers() {} /** * Each row of results is a <tt>Map</tt> from alias to values/entities */ public static final AliasToEntityMapResultTransformer ALIAS_TO_ENTITY_MAP = AliasToEntityMapResultTransformer.INSTANCE; /** * Each row of results is a <tt>List</tt> */ public static final ToListResultTransformer TO_LIST = ToListResultTransformer.INSTANCE; /** * Creates a resulttransformer that will inject aliased values into * instances of Class via property methods or fields. */ public static ResultTransformer aliasToBean(Class target) { return new AliasToBeanResultTransformer(target); } }
@Repository public class RightsOrderDaoImpl implements RightsOrderRepository{ @Autowired EntityManager entityManager; public List<Map> findRightsOrderBalance(){ StringBuffer sql = new StringBuffer("select x.userId,sum(x.amount) amount from (select father_id userId,sum(balance_sum*:rate1*:rate) amount from rights_order where balance_flag=0 group by father_id union all select grandfather_id userId,sum(balance_sum*:rate2*:rate) amount from rights_order where balance_flag=0 group by grandfather_id union all select operator userId,sum(balance_sum*:rate3*:rate) amount from rights_order where balance_flag=0 group by operator)x group by x.userId"); Query query = entityManager.createNativeQuery(sql.toString()); query.unwrap(SQLQuery.class) .setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); query.setParameter("rate", ConstantUtils.TB_TAX_RATE); query.setParameter("rate1",ConstantUtils.FIRST_LEVEL_RATE); query.setParameter("rate2",ConstantUtils.SECOND_LEVEL_RATE); query.setParameter("rate3",ConstantUtils.THIRD_LEVEL_RATE); List<Map> list = query.getResultList(); return list; }