Функция трансляции для Hibernate

Я попытался преобразовать числа с плавающей запятой из строки в поля базы данных, чтобы сравнить их с другими числами. Поле в базе данных было типа String. Я попытался использовать МЕЖДУ критериями, используя cast() как «cast (field, float) BETWEEN 1.003 AND 100.00)» в выражении where. однако это не помогает.

однако, когда я попытался выполнить обычный запрос непосредственно к базе данных без Hibernate, он отлично работает как «SELECT * FROM table WHERE cast (field as float) BETWEEN 1.003 AND 100.00»

Я пробовал «.. WHERE cast (поле как float)> 1,003 AND cast (поле как float) ‹ 100», однако это также не работает в Hibernate.

Я нашел несколько блогов или форм, но это не помогает.

https://forum.hibernate.org/viewtopic.php?p=2399159

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

Я буду признателен, если вы дадите несколько указаний.

Спасибо

тигр


person Tiger    schedule 04.11.2009    source источник


Ответы (1)


  1. Вы получаете недопустимое синтаксическое исключение из Hibernate или ошибку базы данных? Вы можете опубликовать это?
  2. Какую базу данных вы используете? Поддерживает ли он cast() внутри?
  3. Вы пробовали делать сравнение без cast()? Некоторые (на самом деле большинство) баз данных поддерживают неявное преобразование типов.
person ChssPly76    schedule 04.11.2009
comment
1. он не выдает никаких исключений или ошибок из Hibernate. он показал неправильные данные списка. 2. Постгрес SQL 8.3. В PostgreSQL это работает напрямую с помощью cast(). На гибернате не работает и делал (1) выше. 3. Делал без нашего cast(), он не проходит через результат. Он показал, что оператора не существует: переменный символ › числовой. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация - person Tiger; 04.11.2009
comment
Понимаю. BETWEEN на самом деле не < and >, а скорее <= and >=. Во-вторых, диалект Hibernate Postgres отображает float в float4, что может быть довольно сложно сравнивать из-за того, что он является плавающей запятой; вместо этого рассмотрите возможность приведения его к числовому. Наконец, можете ли вы включить вывод SQL в Hibernate и проверить, какой запрос фактически сгенерирован? Если несоответствие не вызвано тем, что инклюзивное и эксклюзивное больше/меньше, чем это должно быть связано с чем-то, что происходит с запросом. - person ChssPly76; 04.11.2009
comment
Проблема заключалась в том, что Hibernate выдает исключение NullPointerException, когда я использовал приведение как числовое. поэтому я создал новый PostgreSQLDialect, который регистрирует тип FLOAT как float, а не как float4. Теперь он работает правильно. Спасибо. :) - person Tiger; 05.11.2009