0

私は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
4

1 に答える 1

3

オブジェクトが他のオブジェクトの ID を保持するのではなく、他のオブジェクトに直接関連付けられているという JPA の要点をすべて見逃しています。

Employee エンティティへの ManyToOne 関連付けを持つ Action エンティティが必要です。これは Department エンティティへの ManyToOne 関連付けを持ちます。アクションに 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 に答える