http://www.wangyongkui.com/java-jpa-query/
Spring Data Jpa 查询返回自定义对象
转载请注明出处:http://www.wangyongkui.com/java-jpa-query。
今天使用Jpa遇到一个问题,发现查询多个字段时返回对象不能自动转换成自定义对象。代码如下:
7 | public Integer getId() { |
10 | public void setId(Integer id) { |
13 | public Strng getName() { |
16 | public void setName(String name) { |
1 | package com.project.user.dto |
6 | public Integer getCount() { |
9 | public void setCount(Integer count) { |
12 | public Strng getName() { |
15 | public void setName(String name) { |
2 | @Query("select count(u),name from User u group by u.name") |
3 | public List<UserDto> findCountGroupByName(); |
写完之后,编译通过,调用查询方法时也没问题,但是到使用时直接报错java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.project.user.dto.UserDto。查看发现返回值类型并不是UserDto而是Object对象,强转也会报错,后来发现@Query支持new对象,所以修改如下:
1 | @Query("select new com.project.user.dto.UserDto(count(u),name) from User u group by u.name") |
2 | public List<UserDto> findCountGroupByName(); |
只改这个还不行,还需要在UserDto中实现构造方法,修改如下:
1 | package com.project.user.dto |
6 | public UserDto(Integer count, String name) { |
10 | public Integer getCount() { |
13 | public void setCount(Integer count) { |
16 | public Strng getName() { |
19 | public void setName(String name) { |
好了,这回查询直接返回的就是UserDto对象了。