@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?望高手指点

解决方案 »

  1.   

    用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);
      

  2.   

    没解决,我只能在集成一套Mybatis架构了。难受
      

  3.   

    不行,返回不了。类型安全限制了。真得用其他方法,或者返回 Object再一个一个强转
      

  4.   

    返回List<Object[]>呢?
      

  5.   

    可以用List<?> findByUserid(int userid) ,最后进行转换获取需要的值
      

  6.   

    @Query("select new map(s.userid as userid,...")
    后面的自己补,不写as xxxx,出来的map的key值是1,2,3.....,大体是这样,正好昨晚也碰这样的问题
      

  7.   

    List<Company> company = companyService.findAllDemp();
    JSONArray jsonArray = JSONArray.fromObject(company); 
    强转成json不就可以了
      

  8.   

     AppStudyRecodTable ,LoadVideoTable 两张表应该在实体类的时候建立关系,如果是一对一的关系的话在 AppStudyRecodTable实体类中加
    @OneToOne
    @JoinColumn(name = "video_id")
    private LoadVideoTable loadVideoTable;
    然后再查询的时候直接List<AppStudyRecodTable> findByUserId(String id);就行了,要获取LoadVideoTable表中的内容创建AppStudyRecodTable对象.getloadVideoTable,,,,
      

  9.   

    @Query(value = "XXXXXX",nativeQuery = true)
        List<Map> getSysPermissionByUserName();
    我用 返回list<map> 解决了
      

  10.   

    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应该也可以
      

  11.   

    照着一楼的写法报错,UnsatisfiedDependencyException,谁有好点的处理方法么
      

  12.   

    我把new map换成 new MAP就不报错了,也可以检查下字段是不是都是实体里面定义的字段,毕竟这是jpa提供的实现,估计要遵守某些规范
      

  13.   

    这样即可
    @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);
      

  14.   

    使用别名就可以正常返回。如下
    @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);