我有一个简单的数据模型如下:
- 实体 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
关于如何最好地编写这样一个查询的任何想法?