spring data jpa也知道自己复杂查询应付不了,所以给了nativeQuery=true的方式,也就是原生sql查询
问题:
1:如果用jpql方式查询并且@Query的查询语句只查询某几个属性字段
eg: select u.userName,u.password,u.email from UserInfo u 如果是这种方式,那么返回值就是List<Object[]>,而不是List<UserInfo>
eg: select u from UserInfo u 如果是这种方式,那么返回值就是List<UserInfo>
so 很蓝瘦香菇!!~
所以复杂查询,就使用nativeQuery=true,直接写原生sql,并且返回值能直接映射成List<UserInfo> 而不是List<Object[]>
2:数据分组并获取每组最新时间的那条记录,思路:
1) 首先select *,max(createTime) from A group by name,(这个时候name已经做了分组,同时携带最新时间,剩下要做的就是级联查询,让时间等于最新时间,name等于不同组的name)
2) 其次select a.* from A a inner join (select *,max(createTime) i_createTime from A group by name) result where a.name=result.name and a.createTime=result.i_createTime
3) 完成分组查询!
将以上sql粘帖到@Query(value="",nativeQuery=true)里面,返回值就能正常返回List<泛型>
原文 http://www.blogjava.net/liuguly/archive/2017/11/17/432901.html