Как Hibernate может сопоставить тип данных SQL nvarchar (max)?
У меня есть столбец в моей базе данных SQL-2005, который раньше был varchar (max), но он был изменен на nvarchar (max).
теперь мне нужно обновить файл отображения hibernate, чтобы отразить изменения, и это то, что раньше было:
когда я пытаюсь запустить приложение, появляется следующая ошибка:
org.зимовать.HibernateException: неверный тип столбца в [Table] для значения столбца. Найдено: ntext, ожидалось: text
Что я должен поместить в атрибут "type", чтобы правильно отобразить столбец как nvarchar (max)?
Я пробовал типа ntext, но hibernate не знал, что это такое. Я попытался установить тип в строка, но это лечится строка как текст тип.
4 ответов
то, что сработало для меня, - это поместить фактическое определение столбца в аннотацию @Column:
@Column(name="requestXml", columnDefinition = "ntext")
private String request;
нашел ответ на Tremend Tech Blog. Вы должны написать свой собственный класс SQLServerDialect, он выглядит примерно так:
public class SQLServerNativeDialect extends SQLServerDialect {
public SQLServerNativeDialect() {
super();
registerColumnType(Types.VARCHAR, "nvarchar($l)");
registerColumnType(Types.CLOB, "nvarchar(max)");
}
public String getTypeName(int code, int length, int precision, int scale) throws HibernateException {
if(code != 2005) {
return super.getTypeName(code, length, precision, scale);
} else {
return "ntext";
}
}
}
этот класс сопоставляет типы Hibernate с типами SQL, поэтому класс сопоставит nvarchar (max) тип данных SQL для спящего режима CLOB тип данных.
на getTypeName метод используется для возврата "ntext", когда Hibernate спрашивает о тип данных с кодом 2005(который выглядит как тип данных nvarchar (max)).
наконец, вам нужно изменить диалект сохраняемости hibernate на этот новый класс SQLServerDialect, который позволяет hibernate переводить типы данных в типы данных SQL.
это может быть исправлено
@Nationalized
аннотация из hibernate, которая помечает тип символьных данных как национализированный вариант (NVARCHAR, NCHAR, NCLOB и т. д.).