С использованием :- Postgres: PostgreSQL 10.0 Гибернация: 4.0.1
У меня есть следующий пример таблицы, созданной в Postgres
CREATE TABLE Automobile
(id SERIAL
,name VARCHAR(20)
,year INTEGER
);
Я создал домен автомобильного класса.
У меня есть следующий запрос критериев гибернации, чтобы вернуть все имена за определенный год.
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
Есть какие-нибудь мысли о том, в чем может быть причина и решение, которое вернет мне список совпадений, пожалуйста?
Спасибо Пит.
общественный класс Автомобиль {частное строковое имя; частный String год; // методы получения и установки} Сопоставления Hibernate <hibernate-mapping> <class name = "my.domain.Automobile" table = "AUTOMOBILE"> <id name = "id" column = "AUTOMOBILE_ID"> <generator class = "последовательность "> <param name = " sequence "> automotive_seq </param> </generator> </id> <property name = " name "type = " java.lang.String "> <column name = " NAME "/> < / property> <property name = "year" type = "java.lang.String"> <column name = "YEAR" /> </property> </class> </hibernate-mapping>
извините, форматирование не очень хорошее, но я только что понял, что я определил «год» как строку в сопоставлении Dao, Domain и Hibernate, но таблица базы данных определена как Integer. Буду менять и перепробовать.





В отображении Hibernate у вас есть
<property name = "year" type = "java.lang.String" >
Вы не показали вам код Java. Я полагаю, что год тоже есть String.
Но в базе данных год - целое число.
Решение: измените отображение следующим образом: Также измените свой класс Java и определите год как Integer.
Спасибо Mentallurg за быстрый ответ.
Покажи нам свою сущность.