Я пытаюсь настроить BooleanExpression с объектами QueryDSL Q, но я получаю исключение нулевого указателя при определении предиката.Я знаю, что использование тега QueryInit на поле проблемы должно исправить это.Это не сработало, когда я попробовал.Я проверил другой пост переполнения стека, в котором говорилось, что QueryInit имеет максимальную глубину пути инициализации 4, но я не могу найти это в документации, и у меня он работает на одном другом поле с длиной пути 5. Является ли это проблемой?с глубиной пути инициализации?Если так, есть ли способ обойти это?
Я попытался установить путь инициализации равным ". ", но он только инициализировал объекты на пару уровней ниже.
Объект queryObject в обоих приведенных ниже случаях является одним и тем же объектом.
Ниже приведен пример, на котором я работаю
changeRequestExpression.and(queryObject.changeRequest.obligation.clientLocation.client.bookOfBusiness.accountManager.id.in(params.accountManagerIds))
Путь QueryInit устанавливается для объекта queryObject следующим образом:
@QueryInit("obligation.clientLocation.client.bookOfBusiness.accountManager")
@OneToOne(mappedBy = "assignment", fetch = FetchType.LAZY)
private ChangeRequestDataObject changeRequest;
Этот следующий набор кода является примером того, что ломается.Основное отличие состоит в том, что одно из полей объекта Q является SetPath и требует, чтобы мы использовали .any ()
supportTicketExpression = queryObject.supportTicket.user.clientRoles.any().client.bookOfBusiness.accountManager.id.in(params.accountManagerIds)
Путь QueryInit задается для объекта queryObject следующим образом:
@QueryInit("user.clientRoles.client.bookOfBusiness.accountManager")
@OneToOne(mappedBy = "assignment", fetch = FetchType.LAZY)
private SupportTicketDataObject supportTicket;