Запрос критериев с использованием Postgres

С использованием :- 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

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

Спасибо Пит.

Покажи нам свою сущность.

mentallurg 09.06.2018 00:35

общественный класс Автомобиль {частное строковое имя; частный 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>

Pete Long 09.06.2018 01:24

извините, форматирование не очень хорошее, но я только что понял, что я определил «год» как строку в сопоставлении Dao, Domain и Hibernate, но таблица базы данных определена как Integer. Буду менять и перепробовать.

Pete Long 09.06.2018 01:28
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
384
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Вы не показали вам код Java. Я полагаю, что год тоже есть String.

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

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

Спасибо Mentallurg за быстрый ответ.

Pete Long 09.06.2018 11:41

Другие вопросы по теме