Hibernate условно subCriteria

79
6

Мне нужно преобразовать этот HQL:


FROM Appointment a WHERE (a.group==null OR :user MEMBER OF a.group.groupMembers) 

к критериям. Как я могу архивировать, что subcriteria используется только тогда, когда maincriteria не соответствует?


Я пробовал что-то подобное, но я застрял:


Criteria subcrit = crit.createCriteria("group");
subcrit.createAlias("groupMembers", "gmembers");
crit.add(Restrictions.or(Restrictions.eq("group", null), Restrictions.eq("gmembers.snuserId", user.getId())));

спросил(а) 2021-01-19T18:00:23+03:00 9 месяцев назад
1
Решение
120

Хорошо, я нашел для меня душу:
сначала я создал отдельный критерий, который находит все идентификаторы групп, в которых пользователь является членом:


DetachedCriteria subquery = DetachedCriteria.forClass(Group.class);
subquery.createAlias("groupMembers", "gm");
subquery.add(Restrictions.eq("gm.userId", user.getId()));
subquery.setProjection(Projections.property("id"));

Тогда для моих основных критериев:

    crit.add(
Restrictions.or(
Restrictions.isNull("group"),
Subqueries.propertyIn("group.groupId", subquery)
)
);

Надеюсь, что это поможет кому-то

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

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