【问题标题】:How to use Spring Data JPA Repository to query from 2 tables?如何使用 Spring Data JPA Repository 从 2 个表中查询?
【发布时间】: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 类创建的

任何帮助将不胜感激。

【问题讨论】:

    标签: java hibernate spring-data


    【解决方案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&lt;Student&gt; findByTeacherTeacherId(String teacherId); 这也可以。
    【解决方案3】:

    有很多方法可以做到这一点,请阅读解释嵌套属性使用的 method naming 约定,或者对于更复杂的查询,请使用 @Query annotation

    【讨论】:

    • 谢谢@zoran。特别是,我只想了解是否支持在 where 子句等效项中组合 2 个表,例如 findByTeacherIdAndStudentId。不过我知道它适用于 NativeSQl。
    猜你喜欢
    • 2020-01-14
    • 2017-11-23
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    • 2017-04-25
    • 2017-10-09
    • 2014-12-02
    相关资源
    最近更新 更多