如何使用 Spring Data JPA Repository 从 2 个表中查询?
Posted
技术标签:
【中文标题】如何使用 Spring Data JPA Repository 从 2 个表中查询?【英文标题】:How to use Spring Data JPA Repository to query from 2 tables? 【发布时间】:2015-01-12 07:40:53 【问题描述】:我有 2 个表,分别是 Student 和 Teacher,并说 Student 与 Teacher 具有多对一关系,并说 teacherId 作为外键。
如果我想查询类似下面的内容,我该如何使用 spring data JPA repo 方法 - findByTeacherName
,
select * from Student S, Teacher T
where T.teacherName = 'SACHIN' and S.teacherId = T.teacherId
注意:这里我只想使用StudentRepository
进行查询,它是使用与TeacherHibernateMapping
类有关系的StudentHibernateMapping
类创建的
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:关于@prateek-singh 的实体,也应该可以定义完全没有id 的查询,只需通过外部实体即可。
List<Student> findByTeacher(Teacher teacher);
【讨论】:
这也适用于我,还有一个由 Prateek Singh 提供的。【参考方案2】:StudentRepository上会有一个repository方法
List<Student> findByTeacher_TeacherId(String teacherId);
你的 entityClass 应该是这样的..
@Entity
Class Student
@Id
String studentId;
@ManyToOne
private Teacher teacher;
而教师班将是..
@Entity
Class Teacher
@Id
private String teacherId;
这里你需要知道的关键是:
findBy +(学生类的外键成员首字母大写)+下划线+教师类的数据成员首字母大写 +(String teacherId) ;
这将为您提供属于该教师的学生列表
【讨论】:
很好的解决方案。我想知道这种方法是否记录在某处。到目前为止我找不到任何东西。 嗨@LiangZhou 给你..docs.spring.io/spring-data/jpa/docs/current/reference/html/… 我们甚至不需要在方法中添加underscore
.. 例如:List<Student> findByTeacherTeacherId(String teacherId);
这也可以。【参考方案3】:
有很多方法可以做到这一点,请阅读解释嵌套属性使用的 method naming 约定,或者对于更复杂的查询,请使用 @Query annotation。
【讨论】:
谢谢@zoran。特别是,我只想了解是否支持在 where 子句等效项中组合 2 个表,例如findByTeacherIdAndStudentId
。不过我知道它适用于 NativeSQl。以上是关于如何使用 Spring Data JPA Repository 从 2 个表中查询?的主要内容,如果未能解决你的问题,请参考以下文章
Spring Data Jpa问题在一个事务中保存父,子和childofchild
使用 spring-data-jpa 获取这些数据如何更正确?
处理 JPA 规范和 spring-data-jpa 时如何使用声明 Stream 作为返回类型
如何使用 spring4+spring-data-jpa(hibernateJpaVendorAdapter)+multidatasource+one entityManager+jpaReposit