Как написать BooleanExpression в QDSL для нескольких запросов - PullRequest
0 голосов
/ 09 января 2019

Я использую Qdsl и Spring Data Rest, я хотел бы написать логическое выражение для следующего условия. Пожалуйста, предложите.

У меня три таблицы говорят

пользователь (имя пользователя, customer_code, partner_id),

   user1 |  null     |  AMZ
   user2 |  DELL     |  null
   user3 |  null     |  AMZ
   user4 |  DELL     |  null

клиент (customer_code, company_name),

       DELL      | DELLY

партнер (номер, имя).

     AMZ     | Amazonx

Обязательное логическое выражение для:

выберите * от пользователя u, где u.customer_code in (выберите customer.customer_code от customer, где customer.company_name = 'Amazonx') или u.partner_id in (выберите id от партнера, где partner.name = 'Amazonx');

Пробное выражение Qdsl BooleanExpression с использованием пути к классам Qgenerated:

user.customer.companyName = Amazonx || user.partner.name = Amazonx

Но вывод не генерируется.

При отладке получил запрос:

выберите user0_.username в качестве username1_15_, user0_.customer_code в качестве customer6_15_, user0_.partner_id в качестве partner_8_15_, из пользователя user0_ кросс-соединение клиента customer1_ кросс-присоединение партнера partner2_, где user0_.customer_code = customer1_.customer_code и user0_2partner_id и user0_2partner (customer1_.company_name =? or partner2_.name =?) limit? ', параметры: [' Amazonx ',' Amazonx ', 10]

"user0_.customer_code = customer1_.customer_code и user0_.partner_id = partner2_.id" возвращает значение false, поскольку любое из значений равно нулю.

Как построить логическое выражение, получить желаемое имя пользователя по названию компании или имени партнера.

...