Я использую QueryDSL 4.2.1 в своем проекте Spring Boot для создания простого предиката на основе заданного UUID.
PostgreSQL таблица выглядит следующим образом:
+--------------------------------------+-----+---------+--------------------------------------+
| id | ... | id_base | id_primal |
+--------------------------------------+-----+---------+--------------------------------------+
| 10190454-8607-47ea-a970-679255daab05 | ... | null | 817b9faa-c282-4f87-814e-ec12443e851c |
+--------------------------------------+-----+---------+--------------------------------------+
Код:
public static Predicate createPredicate(final UUID engineId) {
return (QCar.car.base.isNull().and(QCar.car.primal.isNotNull()).and(QCar.car.primal.engine.id.eq(engineId)))
.or(QCar.car.primal.isNull().and(QCar.car.base.isNotNull()).and(QCar.car.base.engine.id.eq(engineId)));
}
public long countPredicate() {
// Identifier of engine connected with primal object mentioned in database
final UUID engineId = UUID.fromString("5407fb9a-95e5-463d-9986-9b8e9a1d03b5");
return repository.count(createPredicate(engineId));
}
Результат должен быть просто значением 1, но каждый раз равен 0. Если я выполняю только
QCar.car.base.isNull().and(QCar.car.primal.isNotNull()).and(QCar.car.primal.engine.id.eq(engineId))
, все работает нормально. Конечно, у меня будет больше рядов - некоторые с основанием, а некоторые с первичными, поэтому я должен взять оба отношения в беспокойство. Было бы одно или другое (одно со значением и другое равным нулю) - никогда не бывает одновременно.
Может кто-нибудь указать и указать, что я здесь не понимаю?