【发布时间】:2022-11-11 05:11:52
【问题描述】:
我有以下标准构建器声明:
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<TestEntity> criteriaQuery = criteriaBuilder.createQuery(TestEntity.class);
Root<TestEntity> itemRoot = criteriaQuery.from(TestEntity.class);
criteriaQuery.select(itemRoot);
javax.persistence.criteria.CriteriaBuilder.In inClause = criteriaBuilder.in(itemRoot.get("cost"));
inClause.value(criteriaBuilder.literal(5.0d));
javax.persistence.criteria.CriteriaBuilder.In inClause2 = criteriaBuilder.in(itemRoot.get("cost"));
inClause2.value(criteriaBuilder.literal(5.0d));
Predicate pred = criteriaBuilder.or(inClause, criteriaBuilder.and(inClause2, criteriaBuilder.like(itemRoot.get("name"), "%name%")));
criteriaQuery.where(pred);
TypedQuery typedQuery = entityManager.createQuery(criteriaQuery);
List<TestEntity> list = typedQuery.getResultList();
这会产生以下 sql :
select *
from test_entity testentity0_
where
testentity0_.cost in (
5.0
)
or (
testentity0_.cost in (
5.0
)
)
and (
testentity0_.name like ?
)
但是 where 子句是错误的,我希望以下内容:
select *
from test_entity testentity0_
where
testentity0_.cost in (
5.0
)
or (
testentity0_.cost in (
5.0
)
and (
testentity0_.name like ?
)
)
and 放错了位置,它应该放在 or 语句的第二个表达式中
【问题讨论】:
标签: jpa criteriabuilder