Как получить отдельную пользовательскую сущность в Hibernate для каждого адреса пользователя, используя критерии - PullRequest
0 голосов
/ 11 октября 2011

Я внедряю процедуру поиска с критериями гибернации, чтобы найти зарегистрированных пользователей.Каждый пользователь может иметь один или несколько адресов.я построил следующую структуру и добавил ее ограничения, необходимые для запроса к БД:

ricerca = s.createCriteria(User.class).createAlias("addresses","a",Criteria.LEFT_JOIN);

при поиске по пользовательским данным (имя, фамилия, ssn и т. д.) я получил запись для каждогоизвестный адрес, предоставленный пользователем (см. ниже упрощенную версию запроса гибернации, которую я протестировал с клиентом db)

    select *
from User this_ left outer join Address i1_ 
on this_.ID=i1_.User where lower(this_.Name) like '%mario%' order by i1_.ID desc

У Марио есть три адреса, а клиент db возвращает три записи: это нормальнодля меня, но Hibernate возвращает три объекта типа User, каждый с коллекцией адресов, полной всех адресов.Это похоже на то, когда вы упускаете возможность поставить отличительный в запросе.Могу ли я изменить дизайн запроса так, чтобы я получал по одному адресу на строку (все же три результата для одного и того же пользователя, но с одним отдельным адресом)?Примечание. Пользователь не мог указать адрес.

1 Ответ

1 голос
/ 11 октября 2011

Подойдет ли описанное решение здесь для вас?

Требуется использовать проекцию distinct для идентификатора пользователя, чтобы получить идентификаторы пользователя, а затем гидрировать их при необходимости.

ricerca.setProjection(Projections.distinct(Projections.property("id")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...