我有3个表:行动,部门,员工
action (
id
employee_id
name
)
employee(
id
department_id
)
department (
id
name
)
我正在使用以下查询:
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
答案 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
并会给你预期的结果