Spring JPA Repository findBy直接使用POJO的外键而不是类

时间:2017-08-25 15:16:01

标签: java spring spring-data-jpa jpql

我有一个Paper实体和Student实体,如下所示 的 Paper.java

public class Paper extends BaseEntity
{
    ...

    @ManyToOne
    @JoinColumn(name = "student", nullable = false, referencedColumnName = "tp")
    private Student student;

    ...
}

Student.java

public class Student extends BaseEntity
{
    ...
}

我为PaperRepository课程创建了Paper,我希望找到Paper by Student,因此会创建一个查询方法:

List<Paper> findByStudentOrderByDateSubmitted(Student student);

但是这个方法返回一个空结果。我必须指定按学生ID查找的方法,如下所示:

List<Paper> findByAndStudent_IdOrderByDateSubmitted(String id);

使用这种方法,它可以工作。是否可以通过外国班级找到,而不是外国班级的数据成员?

2 个答案:

答案 0 :(得分:1)

尝试以下:

@ManyToOne
@JoinColumn(name = "STUDENT_ID", nullable = false, referencedColumnName = "tp")
private Student student;

答案 1 :(得分:-1)

至少可以使用@Query。

@Query("select p from Paper p where p.student.id = :student.id order by p.student.dateSubmitted")
List<Paper> findByStudentOrderByDateSubmitted(@Param("student") Student student);

UDP

你的意思是可能的或不可能的,或者&#34;是否有可能通过外国班级找到,而不是外国班级的数据成员?&#34;? :) 上面的示例显示了您的情况。

一般来说,是的,并且findByStudent(学生)应该可行。但在某些情况下,解析器算法的结果可能是不确定的,您可以使用下划线符号来说明解析器应该拆分属性的位置。我的猜测是你的情况(如果你可以显示完整的POJO,它可能会有帮助,我可以说更多)。

您可以在此处阅读解析器算法,例如, - https://docs.spring.io/spring-data/jpa/docs/1.11.6.RELEASE/reference/html/#repositories.query-methods.query-property-expressions。 在那里你也可以找到建议不要使用下划线符号,因为它打破了Java惯例,所以有时@Query会更好。