我有以下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/

10-10 05:59