Внутренняя коллекция фильтров критериев гибернации

#java #hibernate #hibernate-criteria

#java #гибернация #переход в спящий режим-критерии

Вопрос:

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

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

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

Работа

  • ID
  • Имя
  • идентификатор пользователя

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

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

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

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

Комментарии:

1. Он хочет знать, как получить все работы для конкретного пользователя (насколько я владею русским языком). Вы либо получаете к ним доступ, вызывая getWorks() в экземпляре пользователя, либо выполняете объединение (или, возможно, выборку объединения, если они загружены с задержкой) для двух объектов User и Work.

Ответ №1:

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

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

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