Почему Hibernate перешел на использование LONG вместо CLOB?

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

13
задан Lukas Eder 5 July 2019 в 13:22
поделиться