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 李六
这样映射数据出错的问题就解决了