【发布时间】:2012-05-08 08:41:48
【问题描述】:
我正在开发一个使用 Oracle 10g 和 Grails v2.0.1 的项目。
我正在尝试对我的 Domain 类中的文本输入字段使用 CLOB 数据类型,但它似乎不起作用。我的第一次尝试是基于我读到的here about GORM,据说使用type: 'text',就像这个例子:
class Address {
String number
String postCode
static mapping = {
postCode type: 'text'
}
}
Grails 将其映射到我的数据库中的 LONG 数据类型,即 not desirable
第二次尝试是尝试type: 'clob'。这可以有效地将我的 DB 数据类型设置为 CLOB,但会导致类转换错误,因为属性本身被定义为字符串,即String postCode。 (请注意,我从未在文档中见过type:'clob',但我可以从方言类推断出clob 可能是那里的有效输入)
我随后尝试将属性定义为java.sql.Clob,即Clob postCode;,但这根本不起作用。没有错误消息,但也没有任何东西被持久化到数据库中。
我采取了保持Clob 方法的最后一步,但使用了一个瞬态String 属性,其中getter/setter 尝试将瞬态String 值映射到持久Clob 字段。但我无法弄清楚如何将我的字符串值放入 Clob。 Grails 不会抛出错误,但我尝试分配后的println() 永远不会打印。我尝试使用myClob.setString(1, theString) 进行分配,但没有成功。
长话短说,我似乎无法在我的场景中使用 Clob,我想知道是否有其他人已经看到并能够克服它。如果是这样,你能告诉我我可能做错了什么吗?
或者...有没有办法覆盖 Grails 选择的数据类型,以便我可以强制它将 postCode type: 'text' 映射到 CLOB?我不精通 Hibernate,所以如果有办法,我不知道该怎么做。
旁注:在我们从 Grails 1.3.7 升级到 2.0.1 之前,我很确定 type: 'text' 实际上确实映射到 Oracle 中的 CLOB。所以这对 2.0.1 来说可能是新的。
【问题讨论】:
-
在2.0.x docs 中实际上写的是,在你的情况下,类型将是 clob,但我还没有使用它,所以我不能保证它适用于 2.0.x