spring-data-jpa 如何用@Query多表查询,返回map

qq_20413595 2016-12-15 11:21:27
@Query("select s.userid,s.playeddury,s.courseid,s.videoid,l.name as videoname,l.clicknum,l.uploadtime,l.downloadnum,l.imahttppath,l.vidhttppath,l.recommend from AppStudyRecodTable s,LoadVideoTable l where s.userid = ? and l.id = s.videoid")
public List<Map<String,Object>> findByUserid(int userid);
我连查了两张表,但是返回值是什么,平时返回值都是定义好的Entiry,但是连表了,就不可能返回Entity了。
于是我返回了List<Map<>>,但是结果并不理想。返回如下
{
"errormsg": "成功",
"data": [
[
1000,
"23",
2,
8,
"敲鼓",
5,
"2016-12-13 04:35:19\n",
0,
"http://1608k8d317.iask.in:80/1480667720159-c100.png",
"http://1608k8d317.iask.in:80/1480667718639-[陈二G的YN人生2]第01集_hd.mp4",
"0"
],
[
1000,
"45",
1,
4,
"税务232",
1,
"2016-12-02 04:35:19",
0,
"http://1608k8d317.iask.in:80/1480667720159-c100.png",
"http://1608k8d317.iask.in:80/1480667718639-[陈二G的YN人生2]第01集_hd.mp4",
"0"
]
],
"errorcode": "0"
}
这是一个list啊,没有map对应的key,如何让他返回map,map的key是select s.userid,s.playeddury,中的userid?望高手指点
...全文
9359 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
有这个功夫不如引入个Mybatis混着用,jpa就不适合这样写
提个小壶 2021-07-01
  • 举报
回复
@写....写个大西瓜 == 公司用jpa 用mybatis还用得着问嘛 就是jpa不会啊
wei19929 2021-01-20
  • 打赏
  • 举报
回复
org.springframework.orm.jpa.JpaSystemException: Unknown entity: javax.persistence.Tuple; nested exception is org.hibernate.MappingException: Unknown entity: javax.persistence.Tuple
这个错是因为什么呢
Thund Zeng 2019-08-01
  • 打赏
  • 举报
回复
使用别名就可以正常返回。如下
@Query(value="select s.userid as userid,s.playeddury as playeddury from AppStudyRecodTable s,LoadVideoTable l where s.userid = ? and l.id = s.videoid",nativeQuery=true)
public List<Map<String,Object>> findByUserid(int userid);
qq_23621927 2019-05-09
  • 打赏
  • 举报
回复
这样即可 @Query(value = "select new com.kevin.demo2.Model.UserVo(u.id,u.name,c.cityName) from TkUser u LEFT JOIN " + "UserCity uc on u.id = uc.userId left join City c on c.id = uc.cityId where u.age >?1") List<UserVo> findjjj(int age);
qq_36215408 2019-03-16
  • 打赏
  • 举报
回复
我把new map换成 new MAP就不报错了,也可以检查下字段是不是都是实体里面定义的字段,毕竟这是jpa提供的实现,估计要遵守某些规范
qq_36215408 2019-03-16
  • 打赏
  • 举报
回复
照着一楼的写法报错,UnsatisfiedDependencyException,谁有好点的处理方法么
  • 打赏
  • 举报
回复
sql取出一个List<Object>。
control拿到这个list,将Object类型转成Map类型
可以参考这段代码
List<Object> resultList = new ArrayList<>();
List<Object[]> result = XXXXService.selectListXXX(Id);
for (Object row : result) {
Object[] rowArray = (Object[]) row;
Map<String, Object> mapArr = new HashMap<String, Object>();
mapArr.put("id", rowArray[0]);
mapArr.put("name", rowArray[1]);
mapArr.put("sex", rowArray[2]);
resultList.add(mapArr);
}
return resultList;

这样前台取到的List就是key:value类型的了
{
"id": "111",
"name": abc,
"sex": 1
},
{
"id": "222",
"name": abc,
"sex": 0
},

要不建一个DTO,用DTO去接这个List应该也可以
a_24024 2018-05-10
  • 打赏
  • 举报
回复
@Query(value = "XXXXXX",nativeQuery = true) List<Map> getSysPermissionByUserName(); 我用 返回list<map> 解决了
lang_yong 2018-04-12
  • 打赏
  • 举报
回复
List<Company> company = companyService.findAllDemp(); JSONArray jsonArray = JSONArray.fromObject(company); 强转成json不就可以了
DimTheMoon 2018-04-12
  • 打赏
  • 举报
回复
AppStudyRecodTable ,LoadVideoTable 两张表应该在实体类的时候建立关系,如果是一对一的关系的话在 AppStudyRecodTable实体类中加 @OneToOne @JoinColumn(name = "video_id") private LoadVideoTable loadVideoTable; 然后再查询的时候直接List<AppStudyRecodTable> findByUserId(String id);就行了,要获取LoadVideoTable表中的内容创建AppStudyRecodTable对象.getloadVideoTable,,,,
icyf 2018-01-22
  • 打赏
  • 举报
回复
引用 1 楼 a878102433 的回复:
用new map。 @Query("select new map(s.userid,s.playeddury,s.courseid,s.videoid,l.name as videoname,l.clicknum,l.uploadtime,l.downloadnum,l.imahttppath,l.vidhttppath,l.recommend) from AppStudyRecodTable s,LoadVideoTable l where s.userid = ? and l.id = s.videoid") public List<Map<String,Object>> findByUserid(int userid);
@Query("select new map(s.userid as userid,...") 后面的自己补,不写as xxxx,出来的map的key值是1,2,3.....,大体是这样,正好昨晚也碰这样的问题
穷水叮咚 2017-12-14
  • 打赏
  • 举报
回复
可以用List<?> findByUserid(int userid) ,最后进行转换获取需要的值
鑫鑫哥哥丨 2017-12-14
  • 打赏
  • 举报
回复
返回List<Object[]>呢?
Wang_Lan_Jun 2017-12-01
  • 打赏
  • 举报
回复
同问怎么解决的啊?我也遇到这个问题了
lilili9309 2017-11-10
  • 打赏
  • 举报
回复
好不容易看到一个类似的。。。结果楼主这也没答案
Spinach007 2017-11-10
  • 打赏
  • 举报
回复
不行,返回不了。类型安全限制了。。。。真得用其他方法,或者返回 Object再一个一个强转
蜜饯酒 2017-11-06
  • 打赏
  • 举报
回复
没解决,我只能在集成一套Mybatis架构了。难受
yg0070 2017-08-16
  • 打赏
  • 举报
回复
楼主解决了吗
qq_35712304 2017-07-04
  • 打赏
  • 举报
回复
请问解决了吗 我也是同样的问题
月满楼 2017-07-03
  • 打赏
  • 举报
回复
用new map。 @Query("select new map(s.userid,s.playeddury,s.courseid,s.videoid,l.name as videoname,l.clicknum,l.uploadtime,l.downloadnum,l.imahttppath,l.vidhttppath,l.recommend) from AppStudyRecodTable s,LoadVideoTable l where s.userid = ? and l.id = s.videoid") public List<Map<String,Object>> findByUserid(int userid);

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧