Spring Data Jpa 查詢返回自定義對象

http://www.wangyongkui.com/java-jpa-query/ java

Spring Data Jpa 查詢返回自定義對象

轉載請註明出處:http://www.wangyongkui.com/java-jpa-query ui

今天使用Jpa遇到一個問題,發現查詢多個字段時返回對象不能自動轉換成自定義對象。代碼以下: this

1 //User 實體對象
3 @Table(name="t_user")
4 public class User {
5     private Integer id;
6     private String name;
7     public Integer getId() {
8         return id;
9     }
10     public void setId(Integer id) {
11         this.id = id;
12     }
13     public Strng getName() {
14         return name;
15     }
16     public void setName(String name) {
17         this.name = name;
18     }
19 }
1 package com.project.user.dto
2 //查詢返回對象
3 public class UserDto{
4     private Integer count;
5     private String name;
6     public Integer getCount() {
7         return count;
8     }
9     public void setCount(Integer count) {
10         this.count = count;
11     }
12     public Strng getName() {
13         return name;
14     }
15     public void setName(String name) {
16         this.name = name;
17     }
18 }
1 //查詢方法
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
2 //查詢返回對象
3 public class UserDto{
4     private Integer count;
5     private String name;
6     public UserDto(Integer count, String name) {
7         this.count = count;
8         this.name = name;
9     }
10     public Integer getCount() {
11         return count;
12     }
13     public void setCount(Integer count) {
14         this.count = count;
15     }
16     public Strng getName() {
17         return name;
18     }
19     public void setName(String name) {
20         this.name = name;
21     }
22 }

好了,這回查詢直接返回的就是UserDto對象了。 對象

相關文章
相關標籤/搜索