我正在努力使用 JPA Criteria API 来为我的数据结构制定查询。好的,我的实体如下。我有用户和组(都共享一个公共基类 OrgEntity)。从逻辑上讲,用户当然可以是多个组的成员。最后,我有一个代表任务的实体,它有一个潜在所有者列表(可以是单个用户或整个组)。域模型总结如下并给出,所以我无法更改。
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
abstract public class OrgEntity {
@Id
public String name;
...
}
@Entity
public class User extends OrgEntity {
public String displayName;
@ManyToMany(mappedBy="members")
public List<Group> groups;
...
}
@Entity
public class Group extends OrgEntity {
@ManyToMany
public List<User> members;
...
}
@Entity
public class Task {
@Id
public String uuid;
@ManyToMany
public List<OrgEntity> potentialOwners;
...
}
我的查询的起点是 User 的单个实例。我想知道用户是潜在所有者的所有任务(无论用户是直接包含在 potentialOwners 集合中还是包含在 potentialOwners 中的组的成员中)。
我第一次尝试使用命名查询如下
SELECT DISTINCT t FROM Task AS t JOIN t.potentialOwners po
WHERE (po IN (SELECT g FROM User u JOIN u.groups g WHERE u = :user)
OR po IN (SELECT u FROM User u WHERE u = :user))
它有效,但我不知道这是否是最有效的方法。有什么建议么?
但是,我不知道如何使用标准 API 来实现这一点。有人可以帮我吗。
谢谢