私はQueryDSLにかなり慣れていないので、これは簡単なことかもしれません。データベースには次の構造があります。
______ ___________ _______
| user | | user2item | | item |
|------| |-----------| |-------|
| id | | user_id | | id |
| name | | item_id | | name |
------ ----------- -------
ここで、特定のユーザーと共通のアイテムを少なくとも1つ持つすべてのユーザーを取得したいと思います。だから私は試しました:
JPASubQuery subQuery = new JPASubQuery().from(user, item).join(user.items, item).where(user.id.eq(myUserId));
return new JPAQuery(entityManager).from(user).where(user.items.in(subQuery.list(item))).list(user);
しかし、subquery.list()はList <Item>ではなく、ListSubQuery <Item>を返すため、これにより'in'句に問題が発生します。どんな助けでも本当にありがたいです。
編集
Timoに感謝します。あなたの提案は機能しますが、残念ながら、この種のサブクエリが複数ある場合、結果のステートメントは次のようにはるかに遅くなります。
User myUser = repository.findOne(myUserId);
return new JPAQuery(entityManager)
.from(user)
.join(user.items, item)
.where(item.in(myUser.getItems()))
.list(user);