Спящий режим hibernate.hbm2ddl.auto=create/update/validate не работает правильно для пользовательских диалектов?

Недавно я обновил Hibernate с версии 3.3.x до 3.6.4. В версии 3.3.x validateSchema (hibernate.hbm2ddl.auto=validate) работает корректно.

В версии 3.6.x валидация нарушена (проверено также для 3.6.4 и 3.6.7). Эта проблема актуальна только для текстового поля.

Я переопределил тип SQL на своем диалекте, например.

public class SQLServer2000UnicodeDialect extends SQLServerDialect {

public SQLServer2000UnicodeDialect(){
    super();

    // Use Unicode Characters
    ...
    registerColumnType( Types.CLOB, "ntext" );
    ...
}

}

Но во время проверки спящий режим использует оригинальные типы SQL вместо настроенных!

Неверный тип столбца в db.dbo.table_name для столбца a_column. Найдено: ntext, ожидается: text

Похоже на баг, но не уверен, что это так. Может я что-то упускаю в настройках?

P.S. hibernate.hbm2ddl.auto=create/update также работает некорректно!

П.П.С. Моя конфигурация сопоставления XML:

<property name="propName" type="text" column="a_column"/>

person FoxyBOA    schedule 09.10.2011    source источник
comment
Во время проверки чего hibernate использует оригинальные типы SQL вместо настраиваемых?   -  person Zasz    schedule 09.10.2011
comment
Configuration.validateSchema() или hibernate.hbm2ddl.auto=create/update/validate   -  person FoxyBOA    schedule 09.10.2011


Ответы (2)


Вы смотрели на это. Похоже на что-то похожее. И автор утверждает, что это работает. И это.

Что касается вашего вопроса, я подозреваю, что при проверке ваш класс каким-то образом не учитывается. Правильно ли вы подключили свой класс и есть ли JAR в пути к классам и т. Д.?

Это сообщение :

Found: ntext, expected: text

говорит мне, что у вас где-то есть свойство типа ntext. Я считаю, что вы должны делать следующее: продолжать использовать типы спящего режима в своей схеме и позволить спящему режиму обрабатывать преобразование типов в тип, специфичный для базы данных, с использованием диалекта. Не используйте пользовательские типы в файлах отображения XML.

person Zasz    schedule 09.10.2011

Немного странно, но hibernate где-то в версиях 3.4-3.6 поменяли привязку "текстового" отображения (на самом деле hibernate имеет два типа отображения для длинных строк: clob и text).

В версии 3.3 оба сопоставления (clob и text) были сопоставлены с Types.CLOB.

В версии 3.6 вы должны предоставить отдельное сопоставление для текста и для clob. Исправление моего диалекта, как показано ниже, решило мою проблему:

public class SQLServer2000UnicodeDialect extends SQLServerDialect {

    public SQLServer2000UnicodeDialect(){
        super();
        ...
        registerColumnType( Types.CLOB, "ntext" );
        registerColumnType( Types.LONGVARCHAR, "ntext" );

        ...
    }
}
person FoxyBOA    schedule 09.10.2011