Hibernate Associations Criteria All (Eq, Ne и т.д.)

97
8

У меня очень уникальный запрос, который дает мне некоторую скорбь в Hibernate. У меня есть следующие объекты:

class Batch {

private Set exports;
private boolean locked;

...
}

class Export {

private bool success;

...
}

Я пытаюсь запросить партию, которая заблокирована, и либо не имеет экспорта, либо только там, где все экспортированные им продукты являются ложными с точки зрения успеха. Я могу создать критерии, чтобы получить только те партии, которые содержат по крайней мере на Export, который является ложным, но не могут найти документацию, чтобы проверить, что все сущности объединения ложны. Кроме того, я также хотел, чтобы те, у которых пока нет Экспорт, обнаружили, что я могу использовать setProjection( Projections.rowCount() ), но это повлекло бы выполнение запроса дважды. До сих пор я так:

Criteria query = session.createCriteria( Batch.class );
query.add( Restrictions.eq( "locked", true ) );
query.createCriteria( "exports" ).add( Restrictions.ne( "success", true ) );
List results = query.list()

Я новичок в Hibernate и не совсем понимаю, что можно и чего нельзя сделать. Я бы предпочел, чтобы это выполнялось с объектами критериев, но не было возражений против использования HQL. Если этого не может быть сделано, если они могут спящий режим обрабатывать любой оператор SQL или же существуют ограничения на это?

спросил(а) 2021-01-19T16:17:03+03:00 2 месяца, 3 недели назад
1
Решение
131

Я бы предпочел использовать HQL в вашем сценарии, но я думаю, что следующий запрос Criteria поможет. Может не работать точно, но даст вам представление.

Criteria query = session.createCriteria(Batch.class)
.createAlias("exports", "exports")
.add( Restrictions.and(
Restrictions.eq("locked", true),
Restrictions.or(
Restrictions.isNotEmpty("exports"),
Restrictions.ne("success", true)
)
)

ответил(а) 2021-01-19T16:17:03+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема