看起来 HibernateLONG
在 3.5.5 版本(我们从 3.2.7 升级)中开始使用数据类型,而CLOB
不是type="text"
.
这会导致问题,因为Oracle 中的数据类型是不应使用LONG
的旧的过时数据类型(请参阅http://www.orafaq.com/wiki/LONGLONG
),并且表中的列不能超过一个一种数据类型。
有谁知道为什么这已经改变?
我尝试将 OracleSetBigStringTryClob
属性设置为 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,让我们看看会发生什么。