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對象了。 對象