首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >选择连接表中没有特定记录的记录

选择连接表中没有特定记录的记录
EN

Stack Overflow用户
提问于 2013-02-25 04:42:38
回答 3查看 185关注 0票数 0

您好,我正在尝试从一个表中选择记录,该表在连接的多对多表中没有具有特定值的记录。

我将在样表上进行解释:

代码语言:javascript
复制
documentation:
id_documentation
irrelevant_data

user:
id_user
irrelevant_data


documentation_user:
id_documentation
id_user
role

我想要实现的是选择每个没有特定角色的用户的文档。有什么想法吗?

主要的问题是我使用java的CriteriaBuilder来创建查询,所以使用子查询是不可能的(我认为)。

EN

回答 3

Stack Overflow用户

发布于 2013-02-25 05:08:17

主要问题不存在- Criteria API有SubQuery。查询本身选择用户的实例,并使用not in构造将结果限制为子查询。子查询选择通过DocumentationUser连接到具有特定角色的文档的所有用户。

票数 0
EN

Stack Overflow用户

发布于 2013-02-25 05:24:14

您可以使用:createAlias(java.lang.String, java.lang.String, int, org.hibernate.criterion.Criterion)方法添加对左连接的限制,请参阅API

查看this answer获取有关如何将左连接与条件一起使用的示例。

票数 0
EN

Stack Overflow用户

发布于 2013-02-25 18:02:44

尝试如下所示(代码未经过测试):

代码语言:javascript
复制
CriteriaQuery<Documentation> cq = cb.createQuery(Documentation.class);
Root<Documentation> u = cq.from(Documentation.class);
Subquery<Integer> sq = cq.subquery(Integer.class);
Root<User> su = sq.from(User.class);
sq.select(su.get("id_user"));
Join<User, DocumentationUser> du = su.join("documentationUserCollection");
sq.where(cb.equals(du.get("role"), "mySpecificRole"));
cq.where(cb.not(cb.in(u.get("id_user")).value(sq)));

另请参见this useful answer on SO

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15056431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档