Похоже, что 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 :(), но это не влияет на отображение типов данных, а только на внутренние SetBigStringTryClob
передачи данных, которые не имеют отношения к моему случаю.
Одним из возможных org.hibernate.dialect.Oracle9iDialect
этого является переопределение 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, давайте посмотрим, что произойдет.