【发布时间】:2019-07-05 23:37:04
【问题描述】:
看起来 Hibernate 在 3.5.5 版本(我们从 3.2.7 升级)中开始使用 LONG 数据类型,而不是 CLOB 用于 type="text" 的属性。
这会导致问题,因为 Oracle 中的 LONG 数据类型是不应使用的旧的过时数据类型(请参阅 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,让我们看看会发生什么。
【问题讨论】:
-
您是否尝试过使用更高版本的方言?我们发现切换到 10g 方言在其中一些方面有很大帮助。编辑:我假设您正在使用它来生成 ddl - 对吗?
-
我们正在使用 Hibernate 的功能,如果表格不存在,它会自动按需创建表格。也就是说,这种变化让我们的生活变得非常痛苦,因为新安装的桌子与旧安装的桌子的结构不同。不过还是谢谢你的建议,明天我去看看10g方言。
标签: java oracle hibernate orm clob