JPA 属性 表达式与使用 'In'
JPA Property Expressions Vs Using 'In'
我有 3 个 类:
大学:
id, name, ....
学生:
id, name, college, ....
标记:
id, subject, student
我有 collegeObject 和 students 的列表。我可以通过两种方式查询学生的分数:
JPA 属性 表达式:
List<Marks> findByStudentCollege(College college)
。
在查询中使用
List<Marks> findByStudentIn(Set<Student> studentList)
我需要帮助来了解从性能角度来看哪个查询更适合使用。
你应该尝试findByStudentCollegeId,这比传递整个对象进行查询要好
您正在执行两个不同的查询:
findByStudentCollege(College college) :这将用于在 "college" 中的每个元素 "student" 中查找大学的标记。您没有在标记和大学之间建立联系,因此您可能会执行类似“select * from marks where student = (Select id from Student where college = (select 来自学院) )
findByStudentIn(Set studentList) :这个将用于查找列表中的标记(0 个或多个 "student" 元素,因此您需要先列出学生,或使用它来查找重点关注一名学生的分数。
如果您没有完整的学生名单,第二个可能是最佳选择。如果你让一所大学的所有学生都使用第一个,因为你正在避免第一个学生列表。
无论如何,您不会看到这些查询之间的区别,即使您正在处理 5k+ 行
我有 3 个 类:
大学:
id, name, ....
学生:
id, name, college, ....
标记:
id, subject, student
我有 collegeObject 和 students 的列表。我可以通过两种方式查询学生的分数:
JPA 属性 表达式:
List<Marks> findByStudentCollege(College college)
。
在查询中使用
List<Marks> findByStudentIn(Set<Student> studentList)
我需要帮助来了解从性能角度来看哪个查询更适合使用。
你应该尝试findByStudentCollegeId,这比传递整个对象进行查询要好
您正在执行两个不同的查询:
findByStudentCollege(College college) :这将用于在 "college" 中的每个元素 "student" 中查找大学的标记。您没有在标记和大学之间建立联系,因此您可能会执行类似“select * from marks where student = (Select id from Student where college = (select 来自学院) )
findByStudentIn(Set studentList) :这个将用于查找列表中的标记(0 个或多个 "student" 元素,因此您需要先列出学生,或使用它来查找重点关注一名学生的分数。
如果您没有完整的学生名单,第二个可能是最佳选择。如果你让一所大学的所有学生都使用第一个,因为你正在避免第一个学生列表。
无论如何,您不会看到这些查询之间的区别,即使您正在处理 5k+ 行