Похоже, что 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, посмотрим, что получится.