java.sql.SQLException: Column 'id' not found. && Jpa自定义返回对象

360 阅读1分钟

出现这个错,是因为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);
}

数据库 image.png

重点 我们找的字段,并不是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);

image.png

我么可以看到已经取到值了。

那个更加复杂一点的接收类型应该怎么办呢?

用万能的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);

还有什么其他方式欢迎补充..