繁体   English   中英

如何在JPA中注释此复杂的联​​接?

[英]How can I annotate this complex join in JPA?

假设我有以下表格:

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


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


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


TimeSheets
=================
TimeSheetKey,    EmployeeLocationXRefKey,    Minutes

好的,如您所见,为了使我能够获取LocationEmployee所有TimeSheets ,我可以在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之间建立一个ManyToOne
  • 使用JoinColumn在EmployeeLocationXRef和Employee之间建立一个ManyToOne
  • 使用JoinColumn在时间表和EmployeeLocationXRef之间建立一个ManyToOne

(当然,这些关联可以是双向的,也可以是双向的)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM