Спящий критерий Присоединитесь к 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 для критериев даже есть примеры. Прочтите документацию: у него много полезной информации.