Hibernate hibernate.hbm2ddl.auto = создать / обновить / проверить не работает правильно для пользовательских диалектов? - PullRequest
0 голосов
/ 09 октября 2011

Я недавно обновил 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" );
    ...
}

}

Но во время валидации hibernate использует оригинальные типы SQL вместо настроенных!

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

Это похоже на ошибку, но не уверен, что это так. Может я что-то упустил в конфигурации?

P.S. hibernate.hbm2ddl.auto = создать / обновить также не работает правильно!

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

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

Ответы [ 2 ]

0 голосов
/ 09 октября 2011

Это немного странно, но hibernate где-то в версиях 3.4-3.6 изменил привязку отображения текста (на самом деле hibernate имеет два типа отображения для длинных строк: clob и text).1004 * В версии 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" );

        ...
    }
}
0 голосов
/ 09 октября 2011

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

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

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

Found: ntext, expected: text

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

...