我对 QueryDSL 比较陌生,所以这可能很容易。我的数据库中有以下结构:
______ ___________ _______
| user | | user2item | | item |
|------| |-----------| |-------|
| id | | user_id | | id |
| name | | item_id | | name |
------ ----------- -------
现在我想获得与给定用户至少有一个共同项目的所有用户。所以我尝试了:
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);
但这给了我在“in”子句中的一个问题,因为 subquery.list() 不返回 List<Item> 而是 ListSubQuery<Item>。任何帮助将非常感激。
编辑
感谢 Timo,您的建议有效 - 但不幸的是,如果您有多个此类子查询,则生成的语句比:
User myUser = repository.findOne(myUserId);
return new JPAQuery(entityManager)
.from(user)
.join(user.items, item)
.where(item.in(myUser.getItems()))
.list(user);