Как заставить hibernate 3.5.6-Final и в памяти hsqldb 2.0.0 работать вместе?

После обновления зависимости hsqldb в pom.xml с 1.8.x до 2.0.0+ я начал получать эту ошибку:

org.hsqldb.HsqlException: length must be specified in type definition: VARCHAR

Очевидно, Hibernate сгенерировал некорректное выражение CREATE TABLE в соответствии с требованиями HSQLDB 2. Должен ли я использовать другую версию Hibernate? Который из? (Тем не менее, я бы предпочел пока придерживаться версии 3.5.6). Или, может быть, есть способ использовать HSQLDB 2 в обратно совместимом режиме?

Спасибо.


person Vlad    schedule 23.11.2011    source источник
comment
Моя причина использования HSQLDB 2 заключается в том, что 1.8 не поддерживает дополнительные условия в выражении JOIN... ON.... Например. Мне нужен фильтр для такой ассоциации: @OneToMany(...) @Where(type='A') Set‹Item› items;   -  person Vlad    schedule 24.11.2011


Ответы (2)


Я предлагаю вам использовать последнюю версию HSQLDB (2.2.6 на момент написания), которая находится на Maven.

Вы можете переопределить применение размера VARCHAR, используя URL-адрес, такой как

jdbc:hsqldb:mem:test;sql.enforce_size=false 

Для версии Hibernate лучшей совместимости можно добиться, используя более новую версию HSQLDialect.java из серии Hibernate 3.6.x. Или просто обновитесь до последней версии 3.6.8

person fredt    schedule 23.11.2011
comment
спасибо за предложение. Я обнаружил, что проблема была вызвана сценарием sql, создающим таблицу, а не Hibernate. Я исправил оператор CREATE TABLE, чтобы указать длину столбцов VARCHAR, и это сработало. Хотя я решил обновить Hibernate до 3.6.8.Final и HSQLDB до 2.2.6, однако теперь у меня проблема с перечислениями: значения добавляются с пробелами, а EnumType Hibernate завершается с ошибкой при преобразовании значения String в значение перечисления. - person Vlad; 24.11.2011
comment
Используйте VARCHAR для типа столбца, чтобы избежать пробелов. Тип CHAR дополняется до длины, используемой для определения. - person fredt; 24.11.2011
comment
Да, это заставит его работать ... но поведение Hibernate по умолчанию остается неправильным, поскольку ему не удается прочитать значение, сохраненное ранее Hibernate, в столбец, сгенерированный тем же Hibernate. Этот конкретный вопрос обсуждается здесь: stackoverflow.com/q/8249523/614135 - person Vlad; 25.11.2011
comment
Также мне помогло использование HSQLDB 2.3.4. Я не использую Hibernate, поэтому меня не беспокоит проблема, о которой упоминал @Vlad. По крайней мере, еще нет. - person J. B. Rainsberger; 08.10.2017

Я хотел бы ответить на ошибку

org.hsqldb.HsqlException: length must be specified in type definition: VARCHAR

поскольку ошибка говорит нам, что мы используем NVARCHAR или VARCHAR в операторе SQL без указания длины

поэтому просто убедитесь, что вы указываете длину для своего столбца, например NVARCHAR(255)

надеюсь, это поможет вам

person Basheer AL-MOMANI    schedule 22.10.2018