Критерии гибернации фильтруют внутреннюю коллекцию - PullRequest
1 голос
/ 11 октября 2011

У меня есть следующие классы / таблицы:

Пользователь

  • ID
  • имя
  • работ // список работ

Работа

  • ID
  • имя
  • user_id

и следующий код:

Criteria criteria = session.createCriteria("User"); 
criteria.list();

возвращает список User s, которые содержат список объектов Work, связанных с ними (по id = user_id).

Как я могу изменить этот запрос, чтобы получить тот же список User, но со следующим ограничением: Список Work не должен включать Work s, где name = 'fck'?

1 Ответ

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

Это возможно, но не разумно, потому что загруженные пользователи не будут отражать фактическое состояние базы данных: их список работ должен содержать все их работы, а не только некоторые из них. Их изменение может привести к нежелательному удалению в базе данных.

Я бы предпочел загрузить интересующие вас работы вместе с ассоциированным пользователем:

Criteria c = session.createCriteria(Work.class, "work");
c.createAlias("work.user", "user");
c.setFetchMode("work.user", FetchMode.JOIN);
c.add(Restrictions.ne("work.name", "fck"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...