我有以下2个实体:
class User {
private String name;
private UserType userType;
}
class UserType {
private String name;
}
我想获取所有userType名称等于'admin'的用户。
我可以编写以下两个返回相同结果的查询。
select u from User u where u.userType.name = 'admin';
和
select u from User u join u.userType ut where ut.name = 'admin';
只是想了解哪种方法更可取,并且有什么区别。
如果我总是可以通过实体之间的导航获得结果,那么什么时候我要遵循联接方法?
最佳答案
从技术上讲,它们是等效的,但第二个要灵活得多。
使用显式联接语法,可以使用JOIN
条件将LEFT JOIN
更改为ON
:
select u
from User u
left join u.userType ut on ut.name = 'admin'
即使没有用户类型,此查询也将始终返回User,因此有时对于某些特定用例而言是理想的。
关于java - JPA查询中的联接和路径导航之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34585320/