поиск критериев гибернации по нескольким объектам - PullRequest
1 голос
/ 10 ноября 2011

У меня есть три объекта: Журнал, Сотрудник и Агентство

Журнал с многозначной ассоциацией с Сотрудником

Сотрудник с многозначной ассоциацией с Агентством

DetachedCriteria criteria = DetachedCriteria.forClass(Log.class);

if (StringUtils.isNotBlank(c.getName())) {
      criteria.createAlias("employee", "e").add(Restrictions.ilike("e.name", "%" + c.getName() + "%"));
    }
if (StringUtils.isNotBlank(c.getAgency())) {
      criteria.createAlias("employee", "e").createAlias("agency", "a").add(Restrictions.ilike("e.a.name", "%" + c.getAgency() + "%"));
        }

Вышеуказанное работает для имени сотрудника, но не для имени агентства.

Я получаю следующую ошибку:

Exception: org.hibernate.QueryException: could not resolve property: agency of: com.example.Log

Все примеры, которые я нахожу, идут только на один уровень вниз.Может кто-нибудь указать мне на ресурс, который говорит мне, как перемещаться ниже?

Ответы [ 2 ]

3 голосов
/ 10 ноября 2011

Второй должен работать так:

criteria.createAlias("employee", "e").createAlias("e.agency","a")
           .add(Restrictions.ilike("a.name", "%" + c.getAgency() + "%"));
3 голосов
/ 10 ноября 2011

Попробуйте следующий код

DetachedCriteria criteria = DetachedCriteria.forClass(Log.class);
criteria.createAlias("employee", "e");

if (StringUtils.isNotBlank(c.getName())) {
    criteria.add(Restrictions.ilike("e.name", c.getName(), MatchMode.ANYWHERE));
}

if (StringUtils.isNotBlank(c.getAgency())) {
    criteria.createAlias("e.agency", "a"); //  <===========
    criteria.add(Restrictions.ilike("a.name", c.getAgency(), MatchMode.ANYWHERE));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...