Я использую Springboot с java 8, querydsl 4.2.1
У меня есть структура из базы данных, где таблица персон, содержащая имя, адрес, active_status. Человек может иметь несколько ky c документов со сроком действия. KY C документы находятся в таблице kyc_document.
Мне нужно получить активных людей, где их документы ky c действительны на сегодняшнюю дату.
Ниже мой код.
QPerson qPerson = QPerson.person;
QKycDOcument qKycDOcument = QKycDOcument.kycDOcument;
Predicate datePredicate = JPAExpressions
.selectOne()
.from(qKycDOcument)
.where(qKycDOcument.fromDate.before(new Date(System.currentTimeMillis())),
qKycDOcument.toDate.isNull().or(qKycDOcument.toDate.after(new Date(System.currentTimeMillis())))
)
.exists();
builder.and(qPerson.activeStatus.eq("Active").and(datePredicate));
Это дает мне запрос ниже -
select
person0_.RECORD_ID as RECORD_I1_7_,
person0_.ACTIVE_STATUS as ACTIVE_S2_7_,
person0_.DECEASED as DECEASED3_7_,
person0_.GENDER as GENDER4_7_,
person0_.PROFILE_NOTES as PROFILE_5_7_,
person0_.RECORD_TYPE as RECORD_T6_7_
from
PERSON person0_
where
person0_.ACTIVE_STATUS=?
and (
exists (
select
1
from
KYC_DOCUMENT kycdoc1_
where
kycdoc1_.FROM_DATE<?
and (
kycdoc1_.TO_DATE is null
or kycdoc1_.TO_DATE>?
)
)
)
order by
person0_.RECORD_ID desc
мой ожидаемый запрос:
select
person0_.RECORD_ID as RECORD_I1_7_,
person0_.ACTIVE_STATUS as ACTIVE_S2_7_,
person0_.DECEASED as DECEASED3_7_,
person0_.GENDER as GENDER4_7_,
person0_.PROFILE_NOTES as PROFILE_5_7_,
person0_.RECORD_TYPE as RECORD_T6_7_
from
PERSON person0_
where
person0_.ACTIVE_STATUS=?
and (
exists (
select
1
from
KYC_DOCUMENT kycdoc1_
where
person0_.RECORD_ID = kycdoc1_.RECORD_ID
and kycdoc1_.FROM_DATE<?
and (
kycdoc1_.TO_DATE is null
or kycdoc1_.TO_DATE>?
)
)
)
order by
person0_.RECORD_ID desc
person0_.RECORD_ID = kycdoc1_.RECORD_ID is дополнительное условие во внутреннем запросе, которое является требованием и не выполнено.
Пожалуйста, предложите, что должно быть в моем построителе предикатов.
Спасибо за предложения, поступающие ...