0
這是我的方法:Java的JPA CriteriaBuilder或表達不正常工作
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<EmployersList> criteriaQuery = builder.createQuery(EmployersList.class);
Root<EmployersList> root = criteriaQuery.from(EmployersList.class);
Expression<String> orgPhoneNumberExp = root.get("orgphoneNumber");
Predicate orgPhoneNumberPredicate = orgPhoneNumberExp.in(phoneNumber);
Expression<String> accPhoneNumberExp = root.get("accphoneNumber");
Predicate accPhoneNumberPredicate = accPhoneNumberExp.in(phoneNumber);
Expression<String> orgStatusExp = root.get("orgphoneStatus");
Predicate orgStatusExpPredicate = builder.upper(orgStatusExp).in("SUSPECT", "FRAUD", "NEGATIVE");
Expression<String> accPhoneStatusExp = root.get("accphoneStatus");
Predicate accPhoneStatuPredicate = builder.upper(accPhoneStatusExp).in("SUSPECT", "FRAUD", "NEGATIVE");
Expression<Date> orgPhoneStatusExpDateExmp = root.get("orgphoneStatusExpdate");
Expression<Date> accPhoneStatusExpDateExmp = root.get("accphoneStatusExpdate");
Predicate orgPhoneStatusExpDatePredicate = builder.or(builder.greaterThanOrEqualTo(orgPhoneStatusExpDateExmp, new Date()), builder.isNull(orgPhoneStatusExpDateExmp));
Predicate accPhoneStatusExpDatePredicate = builder.or(builder.greaterThanOrEqualTo(accPhoneStatusExpDateExmp, new Date()), builder.isNull(accPhoneStatusExpDateExmp));
Expression<Boolean> orgExp = builder.and(orgPhoneNumberPredicate, builder.and(orgStatusExpPredicate, orgPhoneStatusExpDatePredicate)).as(Boolean.class);
Expression<Boolean> accExp = builder.and(accPhoneNumberPredicate, builder.and(accPhoneStatuPredicate, accPhoneStatusExpDatePredicate)).as(Boolean.class);
criteriaQuery.where(builder.or(orgExp, accExp));
List<EmployersList> result = entityManager.createQuery(criteriaQuery).getResultList();
所以,我需要檢查「組織」電話和DB「ACC」手機。我需要檢查...(如果orgphoneNumber IN(我將得到的方法參數中的電話號碼列表),如果orgStatusExp - SUSPECT或FRAUD或NEGATIVE和orgPhoneStatusExpDateExmp> = curdate或null)否則...我需要檢查相同的東西對於「ACC」手機
與此代碼我與這裏選擇:
where
(
employersl0_.ORGPHONE_NUMBER in (
?
)
)
and (
upper(employersl0_.ORGPHONE_STATUS) in (
? , ? , ?
)
)
and (
employersl0_.ORGPHONE_STATUS_EXPDATE>=?
or employersl0_.ORGPHONE_STATUS_EXPDATE is null
)
or (
employersl0_.ACCPHONE_NUMBER in (
?
)
)
and (
upper(employersl0_.ACCPHONE_STATUS) in (
? , ? , ?
)
)
and (
employersl0_.ACCPHONE_STATUS_EXPDATE>=?
or employersl0_.ACCPHONE_STATUS_EXPDATE is null
)
,但我想是這樣的:
where
(
employersl0_.ORGPHONE_NUMBER in (
?
)
and (
upper(employersl0_.ORGPHONE_STATUS) in (
? , ? , ?
)
)
and (
employersl0_.ORGPHONE_STATUS_EXPDATE>=?
or employersl0_.ORGPHONE_STATUS_EXPDATE is null
)
)
or (
employersl0_.ACCPHONE_NUMBER in (
?
)
and (
upper(employersl0_.ACCPHONE_STATUS) in (
? , ? , ?
)
)
and (
employersl0_.ACCPHONE_STATUS_EXPDATE>=?
or employersl0_.ACCPHONE_STATUS_EXPDATE is null
)
)
你能幫我這個問題?: )
沒有改變... – user2870934 2014-09-22 06:20:59