Запрос на связь ManyToOne

Рейтинг: 1Ответов: 1Опубликовано: 07.11.2014

Есть 2 сущности:

public class Firm {
   private String name; 
}

public class Contractor {
   private Integer inn;
   @ManyToOne
   private Firm firm; 
}

Пытаюсь получить список фирм, у которых инн контрактора равен определенному числу. Будет приходить список инн (так что фирм может быть много).

Пока решил сделать для 1 инн. Пытаюсь сделать так:

criteria.createAlias("contractor", "contr");
criteria.add(Restrictions.eq("contr.inn", inn));

И благополучно получаю exeption org.hibernate.QueryException: could not resolve property: contractor of: Firm, что в принципе правильно.

Как сделать запрос, который мне нужен?

P.S. Запрос делать надо к таблице Firm.

Ответы

▲ 2Принят

Я нашел ответ.
Надо делать еще один подзапрос.
С помощью Criteria не получится, нужно использовать DetachedCriteria.
В моем случае запрос будет вот таким:

DetachedCriteria dc = DetachedCriteria.forClass(Contractor.class, "cont");
dc.setProjection(Projections.property("firm"));
dc.add(Restrictions.eq("cont.inn",inn));
criteria.add(Property.forName("id").in(dc));

Вообще с помощью DetachedCriteria можно связать никак несвязанные таблицы.