JPA:JpaRepository中的实体和想要查询的实体不对应怎么办?

本文介绍了在使用JPA的JpaRepository时遇到的查询结果实体类型不匹配的问题。当需要从School实体关联查询Teacher时,直接返回Teacher列表会导致错误。解决方案是使用nativeQuery查询并返回Map列表,然后在服务层进行转换。文章详细展示了如何在SchoolRepository中定义查询方法,并在SchoolService中实现Map到Teacher的转换方法。
摘要由CSDN通过智能技术生成

JPA:JpaRepository中的实体和想要查询的实体不对应怎么办?

每个实体要都要有一个对应的XXXRepository来执行CRUD操作的。

比如现有一个School实体,以及SchoolRepository 接口:

SchoolRepository extends JpaRepository<School, Integer>

如果查询结果是学校,都是没有问题的。

SchoolRepository extends JpaRepository<School, Integer>{
	School findByStudentId();
}

但是,如果要查询出相应的老师呢?

SchoolRepository extends JpaRepository<School, Integer>{
	@Query(value="select t.* from School s inner join 
teacher t on t.s_id = s.id ",nativeQuery=true)
List<Teacher> findTeachers();
}

很显然这样会报错,Failed to convert from type [XXXX] to type [XXXX]。

class Teacher{
 private String id;
 private String name;
}

为了解决这个问题:

SchoolRepository extends JpaRepository<School, Integer>{
	@Query(value="select t.id id,t.name name from School s inner join 
teacher t on t.s_id = s.id ",nativeQuery=true)
List<Map<String,Object>> findTeachers();
}
public class SchoolService{
	@Autowired
	SchoolRepository  schoolRepostitory;
	
	public List<Teacher> findTeachers(){
		List<Map<String,Object>> map = schoolRepostitory.findTeachers()
		List<Teacher> list = convertToTeacher(map);
		return list;
	}

	public List<Teacher> convertToTeacher(List<Map<String,Object>> maps){
		return maps.stream().map(cur->new Teacher(
		cur.get(id),
		cur.get(name)
		)).collect(Collectors.toList());
	}

}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值