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

Posted 长不大的大灰狼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JPA:JpaRepository中的实体和想要查询的实体不对应怎么办?相关的知识,希望对你有一定的参考价值。

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());
	


以上是关于JPA:JpaRepository中的实体和想要查询的实体不对应怎么办?的主要内容,如果未能解决你的问题,请参考以下文章

spring使用 hibernate jpa JpaRepository

spring mvc 的jpa JpaRepository数据层 访问方式汇总

用hibernate,数据库里的数据是date类型,对应的实体类中该字段也是Date类型,想要把查出来的结果转换为yy

java 实体类 注解 继承问题!

用户管理(增删改查)

基于MVC实现增删查改