Критерий запроса с использованием Postgres - PullRequest
0 голосов
/ 09 июня 2018

Использование: - Postgres: PostgreSQL 10.0 Hibernate: 4.0.1

У меня есть следующая таблица примеров, созданная в Postgres

CREATE TABLE Automobile
(id                          SERIAL               
,name                        VARCHAR(20)        
,year                        INTEGER        
);

Я создал домен класса Automobile.

У меня есть следующий запрос критерия гибернации, чтобы вернуть все имена для определенного года.

    final Criteria criteria = session.createCriteria (Automobile.class);

    criteria.add (Restrictions.eq ("year", 1 ));

    List<Automobile> list = criteria.list();

Однако list () генерирует следующее исключение.

    java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

Поэтому я изменил запрос, чтобы передать строковое значение для «года»: -

    criteria.add (Restrictions.eq ("year", new String("1")));

    List<Automobile> list = criteria.list();

Однако list () генерирует другое исключение.

    org.hibernate.exception.SQLGrammarException: ERROR: operator does not exist: integer = character varying
    Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts.
    Position: 1145

Любые мысли очто может быть причина и решение, которое вернет мне список совпадений, пожалуйста?

Спасибо, Пит.

1 Ответ

0 голосов
/ 09 июня 2018

В отображении Hibernate у вас есть

<property name="year" type="java.lang.String" >

Вы не показывали вам код Java.Я полагаю, год также является строкой.

Но в базе данных год является целым числом.

Решение: Измените отображение следующим образом:измените свой класс Java и определите year как Integer.

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