JPA查詢List ID相同導致 返回List與資料庫查詢結果不一致 的問題
1.統計資料的時候 查詢只返回了需要的欄位
select
sum(result) result,
name ,
from
table_test
group by name
having class != '100001'
資料庫返回結果
result name
1 張三
1 李四
3 王五
2 李六
資料庫返回結果
jap返回List
result name
1 張三
1 張三
3 王五
2 李六
2.出問題的程式碼
Model程式碼
@Entity @Data @Table(name="Base_Role") public class TableTestModel{ @Id @GeneratedValue @Column(name="result") private String result; @Column(name ="name") private String name; }
repository程式碼
public interface TableTestRepository extends JpaRepository<TableTestModel,String>{ @Transactional @Query(value=" SELECT sum(result) result," + " name" + " FROM table_test" + " group by name" " having class != '100001'", nativeQuery = true) List<TableTestModel> selectTableTest(); }
3.返回結果出錯原因
應該是id相同 導致的映射出錯
4.解決辦法
查詢的時候返回 這張表每條資料的最大主鍵id,這樣可以保證每條資料的id都是不同的
select
max(id) id,
sum(result) result,
name ,
from
table_test
group by name
having class != '100001'
5.修改後的程式碼
Model程式碼
@Entity @Data @Table(name="Base_Role") public class TableTestModel{ @Id @GeneratedValue @Column(name="id") private String id; @Column(name="result") private String result; @Column(name ="name") private String name; }
repository程式碼
public interface TableTestRepository extends JpaRepository<TableTestModel,String>{ @Transactional @Query(value=" SELECT max(id) id," + " sum(result) result," + " name" + " FROM table_test" + " group by name" " having class != '100001'", nativeQuery = true) List<TableTestModel> selectTableTest(); }
6.修改後的程式碼返回的List是正確的
資料庫返回結果
id result name
10001 1 張三
10002 1 李四
10003 3 王五
10004 2 李六
資料庫返回結果
jap返回List
id result name
10001 1 張三
10002 1 李四
10003 3 王五
10004 2 李六
這樣對映資料出錯的問題就解決了