wob*_*ogs 7 java sql orm jpa left-join
我确定我是傻瓜,但我似乎无法想出这一个......
我有两张桌子:
部门(做,名字)员工(开斋节,第一,最后,做)
他们有相应的实体JPA管理的entites部门和员工.员工有一个Deparment字段,Department没有维护Employee列表.我想做的是找到所有没有员工的部门.使用普通的旧SQL,左连接很容易:
SELECT d.*
FROM department as d LEFT OUTER JOIN employee as e
ON d.did = e.did
WHERE e.did IS NULL
Run Code Online (Sandbox Code Playgroud)
我无法看到如何将此查询转换为JPQL.例如,我在JPQL左连接中找到的所有示例都以另一种方式遍历链接.
SELECT e FROM Employee e LEFT JOIN e.departmert d
Run Code Online (Sandbox Code Playgroud)
而我需要更像的东西
SELECT d FROM Department d LEFT JOIN d.???? WHERE e.department IS NULL
Run Code Online (Sandbox Code Playgroud)
但该部门没有保留对其员工的提及(在我的申请中,显然不是部门和员工).这在JPQL中甚至可能吗?
要执行您要执行的操作,您需要从Departments - > Employees(使用示例实体)设置映射.您可以使用很可能不会破坏您的架构的mappedBy
属性@OneToMany
,例如,
@Entity
class Department {
...
@OneToMany(mappedBy="employee")
Collection<Employee> getEmployees() {
....
}
...
}
Run Code Online (Sandbox Code Playgroud)
这将允许您运行以下内容:
SELECT d FROM Department d WHERE d.employees IS EMPTY
Run Code Online (Sandbox Code Playgroud)
哪个应该给你相同的结果.
在不改变映射的情况下,您应该能够运行类似此查询的内容以获得所需的结果:
SELECT d from Department d WHERE NOT EXIST (SELECT e FROM Employee e where e.department = d)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4271 次 |
最近记录: |