Java 如何在JPA中注释这个复杂的连接?

Java 如何在JPA中注释这个复杂的连接?,java,jpa,join,annotations,Java,Jpa,Join,Annotations,假设我有以下表格: Locations ================ LocationKey, LocationName Employees ================ EmployeeKey, FirstName, LastName EmployeeLocationXRef ================ EmployeeLocationXRefKey, LocationKey, EmployeeKey TimeSheets =======

假设我有以下表格:

Locations
================
LocationKey,    LocationName


Employees
================
EmployeeKey,    FirstName,    LastName


EmployeeLocationXRef
================
EmployeeLocationXRefKey,    LocationKey,    EmployeeKey


TimeSheets
=================
TimeSheetKey,    EmployeeLocationXRefKey,    Minutes
好的,如您所见,为了让我获得
位置
员工
的所有
时间表,我可以在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
实体。这可能是真正的问题。我将了解如何创建该实体映射,并了解它是否使其更容易。

我看不出该模式有任何特别困难或奇怪的地方。每个表应该只有一个实体,并且(除非有唯一的约束):

  • 使用JoinColumn在EmployeeLocationXRef和Location之间创建多工单
  • 使用JoinColumn在EmployeeLocationXRef和Employee之间使用manyOne
  • 时间表和EmployeeLocationXRef之间的多工单,使用JoinColumn
(当然,这些关联可以是双向的,如果您愿意,也可以是反向的)

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查询的直接翻译。

忘记提到
EmployeeLocationXRef
实体尚未映射。这就是问题所在。必须绘制地图,我很害怕。没什么大不了的。我们只是希望能够做一些类似于
location.getTimeSheets()
的事情。我想我们可以为此定制一个getter?当然可以。但是,在查询中,您将无法隐藏EmployeeLocationXRef。