Похоже, что Hibernate начал использовать тип данных LONG
в версии 3.5.5 (мы обновились с 3.2.7) вместо CLOB
для свойства type="text"
.
Это вызывает проблемы, поскольку LONG
тип данных в Oracle является старым устаревшим типом данных (см. http://www.orafaq.com/wiki/LONG), который не должен использоваться, и таблицы не могут иметь более одного столбца с LONG
как тип данных.
Кто-нибудь знает, почему это было изменено?
Я попытался установить для свойства Oracle SetBigStringTryClob
значение true (как предложено в Hibernate> CLOB> Oracle: (), но это не влияет на отображение типов данных, а только на внутренние механизмы передачи данных, которые не имеют отношения к моему делу.
Одним из возможных исправлений для этого является переопределение org.hibernate.dialect.Oracle9iDialect
:
public class Oracle9iDialectFix extends Oracle9iDialect {
public Oracle9iDialectFix() {
super();
registerColumnType(Types.LONGVARCHAR, "clob");
registerColumnType(Types.LONGNVARCHAR, "clob");
}
}
Однако это последнее средство - переопределение этого класса на шаг ближе к разветвлению Hibernate, чего я бы лучше не делал.
Кто-нибудь может объяснить, почему это было сделано?
Это должно быть поднято как ошибка?
[ОБНОВЛЕНИЕ]: я создал https://hibernate.atlassian.net/browse/HHH-5569, давайте посмотрим, что произойдет.