3

我有一个简单的数据模型如下:

  • 实体 1:员工资产。这有一个对 Employee 对象的引用。
  • 实体 2:EmployeeJobPosition。这也有一个 Employee 的引用。它还引用了 JobPosition(这是另一个实体类)对象,该对象又包含一个 OrganisationUnitEntry(这是另一个实体类)对象的集合。

作为参数,我有一组用户选择的 OrganisationUnitEntry 对象(我们称之为 ouEntries)。我需要一个查询,该查询将返回与 JobPosition 相关的所有 EmployeeAsset 对象,该 JobPosition 上有一个 OrganisationUnitEntry 集合,该集合是 ouEntries 的超集(即 ouEntries 是 ...jobPosition.organisationUnitEntries 的子集)。

因此,可以使用以下内容动态构建查询:

SELECT ea
FROM EmployeeAsset ea, EmployeeJobPosition ejp
WHERE ea.employee = ejp.employee
AND :orgUnitEntry1 MEMBER OF ejp.jobPosition.organisationUnitEntries
...
AND :orgUnitEntryN MEMBER OF ejp.jobPosition.organisationUnitEntries

(其中 orgUnitEntry1 - N 只是 ouEntries 中的元素)。

但是,子集类型函数会更整洁,然后我可以将其放入我通常更喜欢的静态/命名查询中。就像是

...
AND :ouEntries SUBSET OF ejp.jobPosition.organisationUnitEntries

关于如何最好地编写这样一个查询的任何想法?

4

1 回答 1

0

可以用IN吗?

SELECT ea
FROM EmployeeAsset ea, EmployeeJobPosition ejp join ejp.jobPosition.organisationUnitEntries o
WHERE ea.employee = ejp.employee
AND o IN :ouEntries

根据您的 JPA 提供程序,您可能需要将 id 与 IN 而不是对象进行比较。EclipseLink 应该允许您比较对象 (>=2.4)。

于 2013-08-14T14:40:02.477 回答