我们说我有以下表格:
Locations
================
LocationKey, LocationName
Employees
================
EmployeeKey, FirstName, LastName
EmployeeLocationXRef
================
EmployeeLocationXRefKey, LocationKey, EmployeeKey
TimeSheets
=================
TimeSheetKey, EmployeeLocationXRefKey, Minutes
好的,正如您所看到的,为了让我获得TimeSheets
和Location
的所有Employee
,我可以在SQL中执行以下操作
select
*
from TimeSheets ts
join EmployeeLocationXRef ex on (ex.EmployeeLocationXRefKey = ts.EmployeeLocationXRefKey)
join Locations l on (l.LocationKey = ex.LocationKey)
join Employees e on (e.EmployeeKey = ex.EmployeeKey)
where
l.LocationKey = 'xxxx'
and e.EmployeeKey = 'yyyy'
但我已经尝试过各种方式,我可以想到使用@JoinTable
等在JPA中使用注释进行映射。
有什么想法可以做到这一点?不幸的是,这是一个遗留系统,架构无法更改。
修改
忘了提及EmployeeLocationXRef
实体尚未直接映射。这可能是真正的问题。我将看到创建该实体映射,看看它是否更容易。
答案 0 :(得分:1)
我没有看到任何关于此架构特别困难或奇怪的事情。每个表应该只有一个实体(除非有唯一约束):
(这些关联当然可以是双向的,或者如果你愿意,可以在另一个方向)。
JPQL查询只是
select ts from Timesheet ts
join ts.employeeXRef ex
join ex.location l
join ex.employee e
where
l.locationKey = 'xxxx'
and e.employeeKey = 'yyyy'
这是SQL查询的直接翻译。