После обновления до HSQL 2.0.1.rc3 - множество org.hsqldb.HsqlException: исключение данных: ... подать жалобу - PullRequest
2 голосов
/ 01 февраля 2011

Я недавно обновил HSQL с 1.8.0.10 до 2.0, а затем 2.0.1.rc3 без каких-либо изменений в моем коде или тестовых данных. У меня есть много тестов, которые раньше работали, и теперь я получаю много исключений, связанных с «кастингом» ...

Caused by: org.hsqldb.HsqlException: data exception: invalid character value for cast

К сожалению, сообщения об исключениях плохие, и я не знаю, какой столбец и т. Д. Является плохим.

Другие исключения показывают, что он пытается пожаловаться на имя пользователя sysadmin на длинное ??

Caused by: org.hsqldb.HsqlException: incompatible data type in conversion: from SQL type VARCHAR to java.lang.Long, value: SA
    at org.hsqldb.error.Error.error(Error.java:77)
    ... 54 more

Действительно странно, что я использую HSQL в режиме памяти, запускаю его пустым и никогда не настраиваю доступ.

PS

Я также обновил Hibernate до 3,6.

Ответы [ 3 ]

1 голос
/ 11 апреля 2013

Я только что столкнулся с подобной проблемой, после обновления до HSQLDB 2.2.9 некоторые модульные тесты начали терпеть неудачу с этим сообщением об ошибке:

java.sql.SQLSyntaxErrorException: incompatible data type in conversion: from SQL type VARCHAR to java.math.BigDecimal, value: SA

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

select id, user from MYTABLE order by id

// then, SQLSyntaxErrorException when DBUnit tried to retrieve the 'user' column:
BigDecimal userId = resultSet.getBigDecimal(2);

Этот ответ привел меня к причине: DBUnit не избегает «пользователя»ключевое слово по умолчанию, которое объясняет, почему сообщение об ошибке имеет значение "SA", которое является системным пользователем по умолчанию HSQLDB.Однако DBUnit позволяет вам настроить экранирование , что решило проблему.

Наконец, причина того, что у Hibernate не было проблем, заключалась в том, что сгенерированный SQL был более явным, например,

select mytable0.id, mytable0.user from MYTABLE mytable0 order by mytable0.id

Сводка:

Узнайте, какая библиотека не экранирует ключевые слова в операторах SQL!

0 голосов
/ 18 февраля 2011

Мы столкнулись с этой же проблемой при упаковке пользовательской версии hsqldb (требуется решить эту проблему Hibernate / hsqldb 2 Не удается гидрировать столбец BLOB-объектов )

Текущие jar-файлы исходного кода hsqldb включают в себястарая версия org.hibernate, которая не правильно определяет версию hsqldb (иронично).Если этот источник включен в вашу сборку, то он может переопределить текущую версию класса Hibernate 3.6.

Проверьте внутри вашей зависимости jar hsqldb и посмотрите, включает ли она какие-либо классы org.hibernate.

Или попробуйте добавить в свой код следующее, чтобы увидеть, откуда исходит используемый диалект:

System.out.println(
    new HSQLDialect().getClass().getProtectionDomain().getCodeSource());
0 голосов
/ 04 февраля 2011

Поведение авто-кастинга стало более строгим в версии 2.x.Это может объяснять проблемы, но невозможно сказать где, не видя реальных определений таблиц и оператора, выполняемого Hibernate.Обширный набор тестов Hibernate работает с очень небольшим количеством (и не связанных) ошибок с последней версией HSQLDB RC.

...