Критерии гибернации возвращают более одного класса - PullRequest
0 голосов
/ 27 октября 2011

Я новичок в критериях Hibernate, и у меня возникла проблема с простым классом получения. Предположим, у нас есть классы:

    Class A{
    int id;
    List<A> aList;
    }

и

  Class B{
    A a;
    (...)

}

и:

Class C{
int id;
String name;
B b;
}

Я хочу получить List , если 'name' похоже на 'abc'. Вот мой код критериев:

    Session session = hibernateTemplate.getSessionFactory().getCurrentSession();
    Criteria crit = session.createCriteria(C.class);
    crit.add(Restrictions.like("nazwa", "%"+string+"%").ignoreCase());
    return crit.list();

Я получил исключение:

org.postgresql.util.PSQLException: ОШИБКА: оператор не существует: символ меняется = целое число

В моем запросе SQL, сгенерированном по критериям, я вижу «левое внешнее соединение» в моих классах A и B, которые содержатся в моем классе C. Наверное, поэтому я не могу загрузить

1 Ответ

1 голос
/ 27 октября 2011

Будут оставлены внешние соединения, если ассоциации @OneToOne или @ManyToOne, просто потому, что они стремятся на сторону владения ToOne по умолчанию.

Если вы хотите использовать такое предложение LIKE, используйте MatchMode.ANYWHERE и ilike вместо:

add(Restrictions.ilike("nazwa", string, MatchMode.ANYWHERE))

Кроме того, убедитесь, что свойство, которое вы хотите запросить в классе C, имеет имя nazwa (в примере кода оно набрано name) и имеет правильный метод получения / установки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...