JPA Criteria Builder OneToMany 限制

2023-11-22

我有一个与子表具有 OneToMany 关联的父级。

我正在尝试使用 CriteriaBuilder 编写一个查询来限制从 Child 表返回的结果。

我正在添加一个谓词,例如

cb.equal(parent.get("children").get("sex"), "MALE")

如果父母有一个儿子或儿子和女儿,则将归还该父母,但也会归还他们拥有的所有孩子。

Hibernate 使用我的谓词触发第一个查询,但获取子项的第二个查询仅使用它不包含的 where 子句中的 JoinColumn

cb.equal(parent.get("children").get("sex"), "MALE").

想法?

我正在使用 SetJoin

children = parent.joinSet("children", JoinType.LEFT)

澄清:

public static Specification<Parent> findPlanBenefits(Integer parentId) {
    return (parent, query, cb) -> {
        Predicate predicates = cb.conjunction();
        List<Expression<Boolean>> expressions = predicates.getExpressions();

        //Parent Criteria
        expressions.add(cb.equal(parent.get("parentId"), parentId));

        //Children Criteria
        SetJoin<Parent, Children> children = parent.joinSet("children", JoinType.LEFT);

        Predicate sex = cb.equal(children.get("sex"), "MALE");
        children.on(sex);

        return predicates;
    };
}

恐怕,JOIN ON没有像你在答案中所期望的那样工作。JOIN ON只告诉如何加入,而不告诉如何加载关系。

因此,为了解决您的问题,您必须在加载子项后对其进行过滤,或者使用单独的查询手动获取所有男性子项。

为了检查如何JOIN ON有效,您也可以尝试相应的 JPQL 查询。


UPDATE

OP告诉JPQL查询select p from parent p join fetch children c where p.parentId = :parentId and c.sex = "MALE" works.

相应的 CriteriaQuery 如下所示:

CriteriaQuery<Parent> criteria = cb.createQuery((Class<Parent>) Parent.class);
Root<Parent> parent = criteria.from(Parent.class);

criteria.select((Selection<T>) parent);
SetJoin<Parent, Children> children = parent.joinSet("children", JoinType.LEFT);

Predicate sexPredicate = cb.equal(children.get("sex"), "MALE");
parent.fetch(children);
//parent.fetch("children");//try also this

criteria.where(sexPredicate);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JPA Criteria Builder OneToMany 限制 的相关文章

  • 了解 netty 通道缓冲区和水印

    我正在尝试了解网络缓冲区和水印 作为一个测试用例 我有一个 netty 服务器 它向客户端写入数据 客户端被阻止 基本上每次读取之间有 10 秒的睡眠时间 在正常 I O 下 如果接收方被阻塞 TCP 发送方将受到限制 由于流量控制 发送速
  • 垂直 ViewPager 中的动画

    我需要垂直制作这个动画ViewPager https www youtube com watch v wuE 4jjnp3g https www youtube com watch v wuE 4jjnp3g 这是我到目前为止所尝试的 vi
  • Java 小程序在 Mac 上闪烁

    这个问题很奇怪 问题并非在每个平台上都会发生 我在使用 MacOSX 的 Google Chrome 中出现了这种情况 但在 Safari 中却没有出现这种情况 对于使用 Windows 的朋友来说 在 Google Chrome 上运行得
  • 如何准确判断 double 是否为整数? [复制]

    这个问题在这里已经有答案了 具体来说 在 Java 中 我如何确定double是一个整数 为了澄清 我想知道如何确定 double 实际上不包含任何分数或小数 我主要关心的是浮点数的性质 我想到的方法 以及我通过谷歌找到的方法 基本上遵循以
  • Selenium 和 TestNG 同时使用“dependsOn”和“priority =”问题

    我正在努力在 GUI 自动化测试中实现更好的工作流程控制 我首先从dependsOn开始 但很快发现缺点是如果一个测试失败 则套件的整个其余部分都不会运行 所以我改用 priority 但看到了意外的行为 一个例子 Test priorit
  • 使用 kryo 注册课程的策略

    我最近发现了 kryonet 库 它非常棒并且非常适合我的需求 然而 我遇到的一个问题是制定一种好的策略来注册所有可以转移的类 我知道我可以在每个对象中编写一个静态方法 该方法将返回它使用的所有类的列表 但我真的不想这样做 为了我自己的时间
  • 如何在 Eclipse 中获得完全限定的类名?

    有没有一种快速方法可以在 Eclipse 中单击 Java 类并获取其完全限定名称 或将其复制到剪贴板 2016年6月29日编辑 正如 Jeff 所指出的 您只需要执行以下第二步 1 Double click on the class na
  • 在Java中如何将字节数组转换为十六进制?

    我有一个字节数组 我希望该数组的每个字节字符串转换为其相应的十六进制值 Java中有没有将字节数组转换为十六进制的函数 byte bytes 1 0 1 2 3 StringBuilder sb new StringBuilder for
  • Java HashSet 是线程安全的只读吗?

    如果我通过 Collections unmodifyingSet 运行 HashSet 实例后 它是线程安全的吗 我问这个是因为 Set 文档声明它不是 但我只是执行读取操作 来自 Javadoc 请注意 此实现不是同步的 如果多个线程同时
  • 接口是否像对象一样对待?

    为什么下面的代码可以工作 interface I class A implements I public String toString return in a class B extends A public String toStrin
  • JPA Web 应用程序管理策略

    我们目前正在开发一个 J2EE Web 应用程序 使用 JPA 作为我们的数据访问层 我们目前正在研究几种不同的策略来在我们的应用程序中利用缓存 Create an EntityManager per request 在请求范围内获取缓存
  • Janusgraph 0.3.2 + HBase 1.4.9 - 无法设置 graph.timestamps

    我在 Docker 容器中运行 Janusgraph 0 3 2 并尝试使用运行 HBase 1 4 9 的 AWS EMR 集群作为存储后端 我可以运行 gremlin server sh 但如果我尝试保存某些内容 我会得到粘贴在下面的堆
  • 从字节数组设置 img src

    我需要设置img src我在对象中拥有的字节数组的属性 img
  • Spring - 如何在不匹配列名的情况下使用 BeanPropertyRowMapper

    我正在开发一个应用程序 该应用程序已使用行映射器从纯 JDBC 转换为 Spring 模板 我遇到的问题是数据库中的列与属性名称不匹配 这阻止我使用BeanPropertyRowMapper容易地 我看到一些关于在查询中使用别名的帖子 这会
  • 为什么不能在 if 语句中声明变量?

    以下 Java 代码无法编译 int a 0 if a 1 int b 0 if a 1 b 1 为什么 不能有任何代码路径导致程序将 1 分配给b无需先声明 我突然想到b的变量范围可能仅限于第一个if声明 但后来我不明白为什么 如果我实在
  • 检查按钮是否可用?如果没有,请等待 5 秒钟,然后再次检查?

    基本上我想看看此刻是否可以单击按钮 如果没有我想再试一次 所以我需要某种 goto 函数来返回到代码的前一行 尽管我怀疑我写得非常糟糕 但它本来可以做得更容易 try driver findElement By xpath button i
  • java Web应用程序中的日期转换

    String date1 13 03 2014 16 56 46 AEDT SimpleDateFormat sdf new SimpleDateFormat dd MM yyyy HH mm ss z sdf setTimeZone Ti
  • com.sun.xml.ws.message.saaj.SAAJHeader 无法转换为 com.sun.xml.ws.security.opt.impl.outgoing.SecurityHeader

    我正在尝试访问第三方 Web 服务 该服务要求我创建一个传递时间信息 用户名和密码的安全标头 我在网上搜索了可行的示例 并尝试了多种方法 我正在尝试使用 Java 6 中内置的内容来做到这一点 我不确定我做错了什么 从 WSDL 生成 We
  • 我怎样才能限定我不“拥有”的自动装配设置器

    要点是 Spring Batch v2 测试框架具有JobLauncherTestUtils setJob与 Autowired注解 我们的测试套件有多个Job类提供者 由于这个类不是我可以修改的东西 我不确定如何限定它自动连接的作业 每个
  • Unicode(希腊语)字符存储在数据库中,例如“??????”

    数据库中的希腊字符就像问号 我找不到解决办法 我使用 Java Swing 开发了一个应用程序 但是当我在 MySQL 中插入希腊字母时 就像问号一样 我将数据库排序规则更改为 utf8 并将列也更改为 utf8 我的项目编码设置为UTF

随机推荐

  • Android:如何在 CSV 文件中写入换行符?

    我正在尝试在 CSV 文件中组织我的数据 我想将我的数据放入特定行 因此我尝试放入 n 但它不起作用 请帮助我将数据放入特定行 谢谢进步 public void writeData String data String strFilePat
  • Java是向后兼容的,但是为什么jdk从1.6升级到1.8时需要升级很多库呢?

    近期我们升级了Jdk版本1 6 to 1 8在我的一个 Java 项目中 但有一些编译或运行时错误 所以我必须升级一些库 gradle 1 9 to 1 10 spring 3 x to 4 x 这是因为他们使用的是 ASM 的一些早期版本
  • ASP 的 JSON 返回错误

    我们正在使用由外部供应商编写的 ASP 应用程序 我的任务是对应用程序进行一些小的更改 但是我对 asp 或 json 一无所知 通过一些研究 我将其放在一起 我在表单上创建了一个文本框 我想将客户端 IP 地址返回到该文本框 我写了一个函
  • SSRS 2008:如何根据类别字段(有条件)隐藏表行

    I am new to Sql Server Reporting Services I have created my following report I want to remove hide rows of Brand Total w
  • 删除使用情节提要创建的导航栏中的半透明栏

    我从故事板创建了一个导航控制器 现在我尝试删除它的半透明选项 我把它放在我的 appdelegate m 上 UINavigationBar appearance setBarTintColor UIColor colorWithRed 5
  • PHP 检测 shell_exec() 命令是否失败

    我在 PHP 的 shell exec 中运行 ffmpeg 命令来转换列表中的多个视频 是否有办法检测视频转换时是否发生错误 或至少验证它完全完成转换 如果发生错误 我不想停止转换其他视频 只是能够记录错误 使用另一个系统调用函数捕获退出
  • 两个正整数相乘的结果转换为负值

    我有这样的代码 int a 629339 int b 4096 long res a b 结果是 1717194752但如果我添加一个手动转换到长long res long a b or long res long a b 结果是正确的25
  • 如何使用 javascript / jQuery 递增/递减十六进制颜色值

    是否可以在 jQuery JavaScript 中逐步增加或减少十六进制颜色值 我想做的是这样的 改编自 for 循环 for var i 0 i lt 100 i console log i 我想做类似的事情 for var color
  • 基于多个 1 级列的子集多索引 DataFrame

    我有一个多索引 DataFrame 但我想为每个 0 级变量 即列 一 和 二 在每个级别 1 保留两列 我可以分别对它们进行子集化 但我想将它们放在一起 这样我就可以并排保留值 这是数据框 index pd MultiIndex from
  • 如何在SQL中从字符串中提取某些第n个字符

    我有一个返回值为 xxx xxx xxx xxxxx xx x 的字段 我如何从该代码中提取第 10 个字符 select substring xxx xxx xxx xxxxx xx x 10 1 The documentation fo
  • 为什么我在运行 MS Access 查询时收到“输入参数值”?

    SELECT ID Name SELECT CityName FROM City WHERE Employee CityID City CityID AS City Name FROM Employee WHERE City Name Ne
  • firebase.auth 不是函数

    我将 Webpack 与 firebase 和 firebase admin 一起使用 为了安装 firebase 我运行了 npm install save firebase 我正在使用以下命令导入 firebase import as
  • ASP.NET MVC 3.0.0.1 版安全补丁破坏了构建 [重复]

    这个问题在这里已经有答案了 安装 ASP NET MVC 3 安全更新后KB2990942看来 MVC 版本增加了3 0 0 0 to 3 0 0 1 这会导致 Visual Studio 不再找到引用
  • pandas 函数与 isin

    我有一个像这样的数据框 aa bb cc a x y a 1 b d z b 2 c e f s 3 np nan d 4 我正在尝试创建一个像这样的新专栏 aa bb cc dd a x y a 1 True b d z b 2 True
  • 追踪 React 组件重新渲染的原因

    是否有系统的方法来调试导致组件在 React 中重新渲染的原因 我放置了一个简单的 console log 来查看它渲染了多少次 但我很难弄清楚是什么导致组件渲染多次 即在我的情况下 4 次 是否存在显示时间线和 或所有组件树渲染和顺序的工
  • 如何将*可选*引用返回到 RefCell 内容中

    我有一种类型 将其数据存储在后面的容器中Rc
  • 在 Mac App Bundle 中嵌入框架

    我正在尝试将 SDL 和 SDL ttf 框架添加到我的应用程序中 并且我已经按照通常的方式完成了操作 将它们添加到 将二进制文件与库链接 部分中 并添加了一个复制文件阶段 将它们复制到 Frameworks 目录 这确实创建了一个带有嵌入
  • Angular 2 隐藏字段的表单验证

    我有一个银行贷款申请 其中包含很多输入字段 其中一些是隐藏的 隐藏字段根据一组条件动态显示 例如 如果您选择选项 1 则会显示隐藏字段 并隐藏一些其他字段 如果您选择选项 2 某些字段将显示 其他字段将隐藏 在表单的末尾 我有一个 这意味着
  • 如何让 SASS 嵌套的嵌套媒体查询与媒体查询或运算符的使用一起使用

    我正在尝试让嵌套的 IE10 媒体查询在 SASS 中工作 但我不理解输出 我认为使用媒体查询会让事情变得很奇怪or操作员 因此 此查询不会适用于所有情况 因为唯一输出的是查询的一侧or 请注意 这些最初是 mixin 我删除了 mixin
  • JPA Criteria Builder OneToMany 限制

    我有一个与子表具有 OneToMany 关联的父级 我正在尝试使用 CriteriaBuilder 编写一个查询来限制从 Child 表返回的结果 我正在添加一个谓词 例如 cb equal parent get children get