Java 使用JPA标准API生成正确的and或条件
我试图在“或”和“和”条件中生成多个括号的查询,但没有生成内部括号。 外部谓词的括号生成正确,但内部谓词的括号生成错误。 代码: 预期查询:Java 使用JPA标准API生成正确的and或条件,java,sql,jpa,jpa-2.0,criteria-api,Java,Sql,Jpa,Jpa 2.0,Criteria Api,我试图在“或”和“和”条件中生成多个括号的查询,但没有生成内部括号。 外部谓词的括号生成正确,但内部谓词的括号生成错误。 代码: 预期查询: select configurat0_.id as id1_1_, configurat0_.createdAt as createdA2_1_, configurat0_.updatedAt as updatedA3_1_, configurat0_.configType as configTy4_1_, conf
select
configurat0_.id as id1_1_,
configurat0_.createdAt as createdA2_1_,
configurat0_.updatedAt as updatedA3_1_,
configurat0_.configType as configTy4_1_,
configurat0_.customerId as customer7_1_,
configurat0_.keyType as keyType5_1_,
configurat0_.keyValue as keyValue6_1_
from
configuration_keys configurat0_
inner join
customers customer1_
on configurat0_.customerId=customer1_.id
where
customer1_.externalId=?
and configurat0_.configType=?
and (
configurat0_.keyType=?
and configurat0_.keyValue=?
or configurat0_.keyType=?
and configurat0_.keyValue=?
)
select
configurat0_.id as id1_1_,
configurat0_.createdAt as createdA2_1_,
configurat0_.updatedAt as updatedA3_1_,
configurat0_.configType as configTy4_1_,
configurat0_.customerId as customer7_1_,
configurat0_.keyType as keyType5_1_,
configurat0_.keyValue as keyValue6_1_
from
configuration_keys configurat0_
inner join
customers customer1_
on configurat0_.customerId=customer1_.id
where
customer1_.externalId=?
and configurat0_.configType=?
and (
(configurat0_.keyType=?
and configurat0_.keyValue=?)
or
(configurat0_.keyType=?
and configurat0_.keyValue=?)
)
请指出任何错误。我打赌这是因为括号是多余的!是的,这里有答案,要么是Spring,要么是Hibernate,要么两者都有,这些问题都集中在JPA上。。。
Specifications<PcPlacement> specification = Specifications.where(null);
Specifications<PcPlacement> specificationInner = Specifications.where(null);
specificationInner = specificationInner.or(buildReferringEntitySpecificationWithContains(
criteria.getUserFullName(), PcPlacement_.pcUser, PcUser_.fullName));
specificationInner = specificationInner.or(buildReferringEntitySpecificationWithContains(
criteria.getUserEmailId(), PcPlacement_.pcUser, PcUser_.emailId));
specification = specification.and(specificationInner);
Specifications<PcPlacement> specification = Specifications.where(null);
Specifications<PcPlacement> specificationInner = Specifications.where(null);
specificationInner = specificationInner.or(buildReferringEntitySpecificationWithContains(
criteria.getUserFullName(), PcPlacement_.pcUser, PcUser_.fullName));
specificationInner = specificationInner.or(buildReferringEntitySpecificationWithContains(
criteria.getUserEmailId(), PcPlacement_.pcUser, PcUser_.emailId));
specification = specification.and(specificationInner);