gpt4 book ai didi

java - 如何构建具有多列的 CriteriaQuery 谓词 IN 子句?

转载 作者:可可西里 更新时间:2023-11-01 07:07:49 26 4
gpt4 key购买 nike

给定一个 Predicate用于 CriteriaQuery ,例如这个:

Predicate predicate = root.get(MyTable.col1).in("col1Val1", "col1Val2");

这是否可以扩展为使用多个 ANDed 字段,例如和下面的SQL一样吗?

SELECT *
FROM MyTable
WHERE (col1, col2, col3) IN (
("col1Val1", "col2Val1", "col3Val1"),
("col1Val2", "col2Val2", "col3Val2")
);

最佳答案

不太优雅的方法,使用 JPA 标准生成器

    Path<String> col1Path=root.get("col1");
Path<String> col2Path=root.get("col2");
Path<String> col3Path=root.get("col3");

Predicate p0=criteriaBuilder.concat(col1Path,col2Path,col3Path)
.in("col1Val1"||"col2Val1"||"col3Val1",
"col1Val2"|| "col2Val2"|| "col3Val2");

第二种方法

    Path<String> col1Path=root.get("col1");
Path<String> col2Path=root.get("col2");
Path<String> col3Path=root.get("col3");

Predicate p1=criteriaBuilder.or(
criteriaBuilder.and(criteriaBuilder.equal(col1Path,"col1Val1"),
criteriaBuilder.equal(col2Path,"col2Val1"),
criteriaBuilder.equal(col3Path,"col3Val1")
),
criteriaBuilder.and(criteriaBuilder.equal(col1Path,"col1Val2"),
criteriaBuilder.equal(col2Path,"col2Val2"),
criteriaBuilder.equal(col3Path,"col3Val2")
)
);

关于java - 如何构建具有多列的 CriteriaQuery 谓词 IN 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40471832/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com