出现这个错,是因为JPA中的返回对象不对。
我的代码
@GetMapping("get/{id}")
public ResponseEntity<Object> createPerson(@PathVariable("id") int id){
Person person = personService.getPerson(id);
System.out.println(person);
return JsonResponse.success(person);
}
@GetMapping("get/{id}")
public ResponseEntity<Object> createPerson(@PathVariable("id") int id){
Person person = personService.getPerson(id);
System.out.println(person);
return JsonResponse.success(person);
}
public interface PersonRepository extends BaseRepository<Person>, JpaSpecificationExecutor<Person> {
@Query(value = "select name,agee from person where person.id = :pid and person.delete_flag=1",nativeQuery = true)
Person selectNameFromPerson(@Param("pid") int pid);
}
数据库
重点 我们找的字段,并不是person的全部字段,所以会报错。
怎么改呢?
换个接收类型就好
修改之后
@Query(value = "select name,agee from person where person.id = :pid and person.delete_flag=1",nativeQuery = true)
Map<String,Object> selectNameFromPerson(@Param("pid") Integer pid);
我么可以看到已经取到值了。
那个更加复杂一点的接收类型应该怎么办呢?
用万能的map,接个list,也就是这样
@Query(value = "select t1.country,t1.province ,sum(t1.attendee_count) as attendeecount,sum(t1.concurrency_count)as concurrencycount from meeting_session_concurrency_byregion t1 where t1.session_id=:sessionUuid and t1.delete_flag=1 group by t1.province ORDER BY attendee_count desc ",nativeQuery = true)
List<Map<String, Object>> findBySessionIdCountConcurrencyByregion(@Param("sessionUuid") String sessionUuid);
那返回参数呢?
可以用JsonParse 转换成我们的vo
像这样
List<Map<String, Object>> meetingSessionConcurrencyByregionList = meetingSessionConcurrencyByregionService.findBySessionIdCountConcurrencyByregion(sessionUuid);
JSONArray jsonArray = JSONUtil.parseArray(meetingSessionConcurrencyByregionList);
List<RegionModel> regions = jsonArray.toList(RegionModel.class);
还有什么其他方式欢迎补充..