我是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>。任何帮助都会非常感激。
修改
谢谢蒂莫,你的建议有效 - 但不幸的是,如果你有多个这样的子查询,那么结果语句要慢得多:
User myUser = repository.findOne(myUserId);
return new JPAQuery(entityManager)
.from(user)
.join(user.items, item)
.where(item.in(myUser.getItems()))
.list(user);
答案 0 :(得分:2)
试试这个
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);