java - Crinteria Join make AND insetad of OR
问题描述
我的问题是我设置 cb.or 它做 cb 和.. cb 是 CriteriaBuilder 我的课程是:
public class User extends BaseEntity<User> {
public static final String CHILDREN_FIELD = "children";
public static final String PARENT_FIELD = "parent";
//Id column based in BaseEntity
OneToOne(fetch = LAZY)
JoinColumn(name = "parent_partner_id")
User parent;
OneToMany(mappedBy = "parent", fetch = LAZY,cascade = {})
private List<User> children;
我的标准代码是:
Root<User> root = query.from(User.class);
Join<User, User> userJoin = root.join(CHILDREN_FIELD, JoinType.LEFT);
userJoin.on(
cb.or(
cb.equal(userJoin.get(ID_FIELD), root.get("id")))
);
代码生成:
select
user0_.id as col_0_0_
from
user user0_
left outer join
user children2_
on user0_.id=children2_.parent_id
and ( <- i write OR in cb!! why it generates AND ?
children2_.id=user0_.id
)
我该如何解决?为什么我的代码会生成 AND 语句?
解决方案
可能那是因为您的or方法调用中有一个参数
cb.or(cb.equal(userJoin.get(ID_FIELD), root.get("id"))));
应该
cb.or(arg1, arg2); // arg1 OR arg2
推荐阅读
- powershell - Powershell 变量未用作变量
- compression - Are Linear Quadtrees the most efficient way to store grid division data
- javascript - 未捕获的 ReferenceError:未定义 y (var)
- php - 将 $date 从 wordpress 中的高级自定义字段转换为 php 格式
- java - 带有 java 后端的 Git 克隆 Web 应用程序
- r - 股票价格数据的合计 5 分钟间隔
- bash - 用 cut 过滤 ping 的输出
- jmespath - JMESPath - 连接嵌套数组中的项目
- java - Java 在货币表示和货币转换方面的表现?
- c# - 正在修改什么集合?收藏已修改;枚举操作可能无法执行