JPQL - 避免使用join

时间:2012-05-15 15:12:47

标签: sql database join jpql

我有3个表:行动,部门,员工

action (
  id
  employee_id
  name
)

employee(
  id
  department_id
)

department (
  id
  name
)
  • action.employee_id可以为null

我正在使用以下查询:

select a.id, a.name, d.name from action a, employee e, department d where         a.employee_id=e.id and e.department_id=d.id

但是在没有employee_id的情况下,我没有在结果中获得这些行

有没有办法在不使用左连接的情况下克服这个问题?


到目前为止尝试过(没有用):

select a.id, a.name, d.name from action a, employee e, department d where         (a.employee_id=e.id and e.department_id=d.id) or a.employee_id is null

1 个答案:

答案 0 :(得分:3)

你错过了JPA的全部要点:让对象直接与其他对象相关联,而不是持有其他对象ID的对象。

您应该拥有一个与Employee实体具有ManyToOne关联的Action实体,该实体与Department实体具有ManyToOne关联。你不应该在Action中有一个employeeId字段。而且你不应该在Employee中有一个departmentId字段。

例如,这将允许您通过简单地调用

来获取操作的部门名称
action.getEmployee().getDepartment().getName()

您可以在查询中使用左连接,这将成为

select a.id, a.name, d.name
from Action a
left join a.employee e
left join e.department d

并会给你预期的结果