4

我对 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);
4

1 回答 1

4

试试这个

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.any().in(subQuery.list(item))).list(user);
于 2012-05-23T18:06:51.013 回答