小编典典

为什么Hibernate切换为通过CLOB使用LONG?

hibernate

似乎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,让我们看看会发生什么。


阅读 275

收藏
2020-06-20

共1个答案

小编典典

看来该问题的解决方案正在使用materialized_clob,至少这是盖尔·巴德纳(Gail
Badner)在HHH-5569上所说的。

这根本没有帮助我(我对此发表了评论),但可能对这里的其他人有所帮助。无论如何,该错误都会被拒绝,对此我几乎无能为力,只能使用覆盖的方言:(

2020-06-20