Как использовать объединение в критериях гибернации в следующих ситуациях - PullRequest
0 голосов
/ 30 октября 2009

У нас есть две таблицы «Семья» и «Член», отношения между ними таковы, что «Семья» имеет набор членов, но член не имеет никаких семейных отношений.

Я хотел получить член, использующий dob и family, для этого я использую API критериев Hibernate, но я не понимаю, как написать запрос соединения, так как у членов нет экземпляра Family с ним. Так что не в состоянии использовать FetchMode. Есть ли другой способ добиться этого?

спасибо заранее. - Рави Никам.

Ответы [ 2 ]

1 голос
/ 06 ноября 2009

спасибо, ребята, я решил это с одним из моих коллег как под

DetachedCriteria subquery = DetachedCriteria
            .forClass(Family.class, "family")
            .add(Expression.eq("family.id", family.getId()));

                subquery.createAlias("members", "members")
                    .add(Restrictions.eqProperty("members.id", "m.id"))
                    .add(Expression.eq("members.DOB",Date));

                subquery.setProjection(Property.forName("members.id"));

                Criteria crit = session.createCriteria(Member.class, "m")
                        .add(Subqueries.propertyIn("m.id", subquery));


            results = crit.list();
У

результатов есть список участников, которых я просил.

1 голос
/ 30 октября 2009

вместо попыток сделать

from Member m join m.family f where f.name = ?

, что невозможно, вы можете сделать прямо противоположное

select m from Family f join f.members m where f.name = ?

Я знаю, это HQL, а не Критерии, но это то, чем я владею более свободно. Это должно быть тривиально, чтобы "перевести" этот HQL в Критерии, хотя.

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