Mar*_*arc 5 oracle grails hibernate
我正在使用Oracle 10g和Grails v2.0.1开发一个项目.
我正在尝试在我的Domain类中使用CLOB数据类型作为文本输入字段,但它似乎不起作用.我的第一次尝试是基于我在这里读到的关于GORM的内容,在哪里可以使用type: 'text',如下例:
class Address {
String number
String postCode
static mapping = {
postCode type: 'text'
}
}
Run Code Online (Sandbox Code Playgroud)
Grails将其映射到LONG我的数据库中的数据类型,这是不可取的
第二次尝试是尝试type: 'clob'.这有效地使我的DB数据类型为CLOB,但导致类转换错误,因为属性本身被定义为字符串,即String postCode.(请注意,我从未type:'clob'在文档中看到过,但我可以从方言类中推断出clob可能是有效的输入)
我随后尝试将该属性定义为java.sql.Clob,即Clob postCode;,并且根本不起作用.没有错误消息,但没有任何内容持续存在于DB中.
我采取了保持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的新功能.
Mar*_*arc 11
我想我在Custom Hibernate Types的文档中找到了答案.
在这种情况下,使用sqlType属性覆盖列的SQL类型
这似乎有效.
看起来我可以使用它来强制我的数据库类型为CLOB,同时保持java类型为String.换句话说,可能type选择DB类型和Java类型来处理字段?但是sqlType提供更多粒度来指定要使用的数据库类型.
所以上面的示例Domain类在我的例子中应该是这样的:
class Address {
String number
String postCode
static mapping = {
postCode sqlType: 'clob'
}
}
Run Code Online (Sandbox Code Playgroud)
我从另一个关于该主题的StackOverflow问题中收集到了这个问题(这个问题本身就让我感到困惑,而接受的答案误导了我!):
我花了一天时间试图弄明白这一切,这令人非常沮丧.所以也许我在这里的主题笔记将帮助别人避免这种体验!
虽然我在这里保留说明...这篇文章在解决如何在我的映射中更具体地进行故障排除方面证明是有用的:
有趣的代码在这里转载:
//CONFIG.GROOVY (maps a custom SixDecimal type)
grails.gorm.default.mapping = {
'user-type'( type: SixDecimalUserType, class: SixDecimal )
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3090 次 |
| 最近记录: |