gpt4 book ai didi

java - JPQL有 "SUBSET"函数吗

转载 作者:行者123 更新时间:2023-12-02 10:50:43 27 4
gpt4 key购买 nike

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

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

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

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

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

关于如何最好地编写这样的查询有什么想法吗?

最佳答案

可以使用 IN 吗?

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

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

关于java - JPQL有 "SUBSET"函数吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18231296/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com