我有以下標準構建器宣告:
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 陳述句的第二個運算式中
uj5u.com熱心網友回復:
兩個運算式是等價的,因為and運算子優先于or:
A or B and C相當于A or (B and C)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/532388.html
標籤:jpa标准生成器
下一篇:R:編碼和解碼資料?
