我有一个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);
使用这种方法,它可以工作。是否可以通过外国班级找到,而不是外国班级的数据成员?
答案 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会更好。