データ構造のクエリを作成するための 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 を使用してこれを実装する方法がわかりません。誰かが私を助けてくれませんか。
ありがとう