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