Прежде всего уточнить, что я очень плохо с базами данных, поэтому, пожалуйста, не иметь в виду, с моим кодом: P«где» ограничения не работает на HQL запрос с присоединиться пункт
У меня есть проблема с запросом в спящем режиме с использованием соединений и ограничений. У меня есть огромный список Assignments
, а некоторые из них имеют объект Asr
.
queryString.append("select new commons.bo.assignment.AssignmentAssociateExtract("
+ " assignment.id, assignment.contract.assignmentStatus,"
+ " assignment.contract.beginDate, assignment.contract.endDate,"
+ " assignment.contract.contractType, assignment.organizationalData.homeCountryKey,"
+ " assignment.organizationalData.hostCountryKey,"
+ " assignment.organizationalData.homeOrgUnitKey,"
+ " assignment.associate.globalIdAssociate,"
+ " assignment.associate.localIdHome,"
+ " assignment.associate.firstName,"
+ " assignment.associate.lastName)"
+ " from Assignment assignment left join assignment.asr asr"
+ " where assignment.contract.assignmentStatus.code = 5"
+ " and asr.homeAsrElegibility is not 'X'"
+ " or asr.homeAsrElegibility is null"
);
Я создавал этот запрос шаг за шагом. Прежде чем я создал его без предложения соединения left join assignment.asr asr
, и он работал хорошо, но, конечно, он не показывал Assignments
, у которого не было объекта Asr
. После того, как я добавил присоединиться пункт, теперь он показывает каждые одиночные Assignment
(10000 записей, когда те, у кого есть assignmentStatus = 5
только 4,000) и ограничения, как
where assignment.contract.assignmentStatus.code = 5
не отражаются в результате больше.
Итак, чтобы подвести итог: мне нужен список со всеми назначениями с присваиваниемStatus = 5 и asr.homeAsrElegibility! = 'X'. Но он должен также включать все назначения с присваиваниемStatus = 5, даже если у них нет объекта Asr.
Любые идеи? Благодаря!
Вы правы! Я пытался удалить предложение 'is not 'X'' и просто оставил последний и, конечно же, удалил ключевое слово' или', и он работает. Благодаря! – Carloshf
Добро пожаловать. –