java - Criteria Builder 中的 Join 中的 getOn 不起作用

标签 java hibernate jpa criteria-api

我想连接两个表并删除连接查询中的 on 子句以设置新的自定义 on 子句,但是我总是从“joinb”获得空谓词,因此无法与更多条件连接。 我的代码如下。

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<myClass> query = cb.createQuery(myClass.class);

Root<a> a = query.from(a.class);
Join<a, b> joinb = a.join("b", JoinType.INNER);
Predicate joinBOn = b.getOn();
b.on(cb.or(joinBOn, cb.or("condition1", "condition2")));

这里的问题是 joinBOn 始终为 null。 我是新人,所以我不知道发生了什么。

最佳答案

根据记录,getOn()

Return the predicate that corresponds to the ON restriction(s) on the join, or null if no ON condition has been specified.

在这种情况下,显然没有指定 ON 条件,因此预期为 null。这不是问题,因为不需要获取当前的 ON 限制:

Predicate condition1 = ...
Predicate condition2 = ...
b.on(cb.or(condition1, condition2));

关于java - Criteria Builder 中的 Join 中的 getOn 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58531075/

相关文章:

java - 无法使用 PDFBOX 读取 PDF 文件

java - Hibernate - 在一个事务中保存多个对象

java - 如何在不使用任何映射表的情况下将 Hibernate 中的集合映射到 PostgreSQL DB?

java - JPA/hibernate : mapping a single element in an entity with an one-to-many relationship

java - App Engine 和数据存储区的 API 是什么?

java - Hibernate:哪个更好:在多对一关联中保存源或目标

java - 在 hibernate 搜索中使用现有分析器 AnalyzerDiscriminator

java - Spring Boot - 无法确定数据库类型 NONE 的嵌入式数据库驱动程序类

java - ConcurrentModificationException,帮助我理解一些事情

mysql - "java.net.SocketException: Broken pipe"将 Hibernate 与 Mysql 结合使用时