最近由于需求变更,客户需要在原来的查询基础上加上一个判断条件,但是这个判断条件所在的实体跟原来的查询实体没有直接关联。为了不影响原来的查询结果,改为用原生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的属性对应。
相关文章
- Spring JdbcTemplate的queryForList(String sql , Class elementType)返回非映射实体类的解决方法
- 用pickle存储Python的原生对象方法
- 手把手教你用Django执行原生SQL的方法
- 用SQL查询方式显示GROUP BY中的TOP解决方法[转]
- 用vb编的一个程序用ADO对象编程查询SQL数据库调用存储过程的问题
- 用SQL语句实现随机查询数据并不显示错误数据的方法
- 用SQL语句查询数据库中某一字段下相同值的记录方法
- 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理
- 让JPA的Query查询接口返回Map对象的方法
- 用SQL查询数据库中某一字段下相同值的记录方法