Критерии гибернации используют псевдоним внутри ограничений - PullRequest
0 голосов
/ 21 марта 2019

У меня есть два класса, где второй класс является свойством первого. Например

Выплачено

class Payout{

int id;

Batch batch;

}

Пакетная

class Batch{

int id;

Date closedDate;

}

Я хочу получить выплаты с помощью пакета null or batch.closedDate is null;

Я написал

Criteria criteria = session.createCriteria(Payout.class, "payout")
.add(or(isNull("payout.batch"), and(isNotNull("payout.batch"), isNull("payout.batch.closedDate"))));

Здесь это не работает, так как нет соединения, но если я создаю псевдоним в верхней части для партии, тогда критерии будут фильтроваться, только если выплата имеет пакет. Как я могу написать критерии без псевдонима для свойства, но отфильтровать со свойством свойства?

1 Ответ

0 голосов
/ 21 марта 2019

Прочитав некоторое время, я нашел решение. Criteria criteria = session.createCriteria(Payout.class) .createAlias(Payout_.batch.getName(), "b", JoinType.LEFT_OUTER_JOIN) .add(or(isNull(Payout_.batch.getName()), isNull("b." + Batch_.closed.getName()))); Как я уже говорил в этом вопросе, в функции createAlias ​​по умолчанию используется обычное соединение, и оно принимает выплаты, которые имеют пакет. Но с JoinType.LEFT_OUTER_JOIN он ищет только тот пакет, идентификатор которого равен payout.batch.id, если он выходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...