JPA属性表达式与使用'In'

时间:2018-09-17 16:13:13

标签: java mysql spring spring-data-jpa query-performance

我有3个课程:

大学
id, name, ....

学生
id, name, college, ....

标记
id, subject, student

我有 collegeObject 和我的学生列表。我可以通过两种方式查询学生的成绩:

JPA属性表达式
List<Marks> findByStudentCollege(College college)

在查询中使用
List<Marks> findByStudentIn(Set<Student> studentList)

从性能的角度来看,我需要帮助来了解哪种查询更合适。

2 个答案:

答案 0 :(得分:1)

您要执行两个不同的查询:

findByStudentCollege(大学学院):这将用于在“学院”中每个“学生”元素中查找大学的分数。您没有在商标和大学之间建立联系,因此您可能会进行如下查询:“从学生=(从学生那里选择id到大学=(从大学选择)的标记中选择*)

findByStudentIn(Set studentList):这将用于查找列表中的分数(0个或多个“ student”元素,因此您需要在之前列出学生,或使用它查找一个学生的分数专注。

如果您没有完整的学生名单,第二个可能是最好的选择。如果您拥有一所大学的所有学生,则使用第一个,因为您正在避免第一个学生名单。

无论如何,即使您正在处理5k +行,您也不会看到这些查询之间的差异

答案 1 :(得分:0)

您应该尝试使用findByStudentCollegeId,这比传递整个对象进行查询要好