用原生sql查询返回实体对象的方法

时间:2021-04-20 13:42:22

最近由于需求变更,客户需要在原来的查询基础上加上一个判断条件,但是这个判断条件所在的实体跟原来的查询实体没有直接关联。为了不影响原来的查询结果,改为用原生SQL,使用left join来关联查询。为了不改变对查询结果的处理逻辑,将查询结果封装成原来的对象进行操作。具体操作方法如下: 
1.基于JPA规范的程序: 
Query query = entityManager.createNativeQuery("select id, name, age from t_user"); 
  query.unwrap(SQLQuery.class).setResultTransformer(Transformers.aliasToBean(clazz)); 
  //  其中clazz为封装对象的class
  List rows = query.getResultList(); 
  2.基于Session的程序: 
sess.createSQLQuery("SELECT NAME, BIRTHDATE FROM CATS").setResultTransformer(Transformers.aliasToBean(clazz)); 
这两种方法需要注意的是查询的字段的别名需要跟clazz的属性对应。