0

我有 3 个表:操作、部门、员工

action (
  id
  employee_id
  name
)

employee(
  id
  department_id
)

department (
  id
  name
)
  • action.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

但是在没有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
4

1 回答 1

3

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

您应该有一个 Action 实体,该实体与一个 Employee 实体具有多对一关联,而该实体与一个部门实体具有多对一关联。您不应该在 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

会给你预期的结果

于 2012-05-15T15:26:01.000 回答