Hibernate API поиска с 2 таблицами - PullRequest
0 голосов
/ 14 января 2010

Я пытаюсь сделать запрос с помощью API критериев Hibernate. Это выглядит просто, но я не могу заставить его работать. У меня есть две таблицы. Человек и роли. Человек имеет множество ролей. Роль не имеет никакого отношения к человеку. (т.е. пользователь A может быть администратором, пользователь, другой пользователь B может быть только администратором и т. д.) Я просто хочу искать всех, кто выполняет определенную роль. то есть Если я выберу админа, я получу как А, так и В Если я выберу пользователя, я получу только A.

Я действительно просмотрел интернет, но ничего подобного не нашел. Может ли кто-нибудь, пожалуйста, указать мне в правильном направлении?

Ответы [ 2 ]

1 голос
/ 14 января 2010

редактировать:

взято из здесь

Представьте себе случай интернет-магазина, который продает рубашки. Каждая модель рубашки поставляется в определенном количестве доступных размеров. Вы хотите, чтобы запрос нашел все модели рубашек с размерами более 40. В HQL запрос может быть следующим:

from Shirt shirt
join shirt.availableSizes size
where size.number > 40

Используя Criteria API, вы используете createCriteria () для создания внутреннего соединения между двумя таблицами, как в следующем примере:

session.createCriteria (Shirt.class)
.createCriteria ( "availableSizes")
.add (Expression.gt ("число", новое целое число (40)))
.list ();

В вашем случае синтаксис должен выглядеть примерно так:

session.CreateCriteria<User>
   .CreateCriteria("Roles")
   .Add(Expression.Eq("Id", your_role_id)
   .List<User>(); (oooops, NHibernate syntax...)

Другой способ сделать это - добавить список пользователей к каждой роли (ленивое соединение, чтобы у вас не возникало проблем с производительностью в других местах) и просто получить оттуда набор пользователей. 1026 *

0 голосов
/ 15 января 2010

Спасибо, Данаил! Я продолжил поиск после публикации здесь и решил мою проблему

DetachedCriteria dc = new DetachedCriteria.forClass (User.class); dc.createCriteria ("полномочия", "код"). add (Restrictions.eq ("код", "ROLE_ADMINISTRATOR"));

Это похоже на то, что вы предоставили. Еще раз спасибо!

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