http://www.wangyongkui.com/java-jpa-query/ java
Spring Data Jpa 查询返回自定义对象
转载请注明出处:http://www.wangyongkui.com/java-jpa-query。 ui
今天使用Jpa遇到一个问题,发现查询多个字段时返回对象不能自动转换成自定义对象。代码以下: this
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对象,因此修改以下: spa
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中实现构造方法,修改以下: .net
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对象了。 对象