Спящий условно подкритерий - PullRequest
2 голосов
/ 22 марта 2012

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

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

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

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

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

1 Ответ

6 голосов
/ 23 марта 2012

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

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)
                    )
            );

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

...