Спящий критерий Присоединитесь к 3 таблицам
Я ищу критерии для спящего режима:
Dokument.class
сопоставляется с ролью
Идентификатор роли
Role.class
имеет контактное лицо
ContactID
Contact.class
Имя
LastName
Я хочу найти First или LastName в классе Contact и получить список подключенных Dokuments.
Я пробовал что-то вроде этого:
session.createCriteria(Dokument.class)
.setFetchMode("role",FetchMode.JOIN)
.setFetchMode("contact",FetchMode.JOIN)
.add(Restrictions.eq("LastName","Test")).list();
Я получаю сообщение об ошибке, не могу разрешить свойство "LastName" для класса "Документ"
Может кто-нибудь объяснить, почему поиск по запросу в Dokument, а не на всех присоединенных таблицах? Заранее благодарю за помощь!
Ответы
Ответ 1
В режиме выборки указывается, что ассоциация должна быть получена. Если вы хотите добавить ограничения на связанный объект, вы должны создать псевдоним или подкритерий. Обычно я предпочитаю использовать псевдонимы, но YMMV:
Criteria c = session.createCriteria(Dokument.class, "dokument");
c.createAlias("dokument.role", "role"); // inner join by default
c.createAlias("role.contact", "contact");
c.add(Restrictions.eq("contact.lastName", "Test"));
return c.list();
Это, конечно, хорошо объяснено в справочном руководстве Hibernate, а javadoc для критериев даже есть примеры. Прочтите документацию: у него много полезной информации.