加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

将Oracle 10g CLOB与Grails 2.0.1一起使用

发布时间:2020-12-12 13:14:49 所属栏目:百科 来源:网络整理
导读:我正在使用Oracle 10g和Grails v2.0.1开发一个项目. 我正在尝试在我的Domain类中使用CLOB数据类型作为文本输入字段,但它似乎不起作用.我的第一次尝试是基于我读到的here about GORM,其中说使用类型:’text’,就像这个例子: class Address { String number
我正在使用Oracle 10g和Grails v2.0.1开发一个项目.

我正在尝试在我的Domain类中使用CLOB数据类型作为文本输入字段,但它似乎不起作用.我的第一次尝试是基于我读到的here about GORM,其中说使用类型:’text’,就像这个例子:

class Address {
   String number
   String postCode
   static mapping = {
       postCode type: 'text'
   }
}

Grails将其映射到我的数据库中的LONG数据类型,即not desirable

第二次尝试是尝试输入:’clob’.这有效地使我的DB数据类型成为CLOB,但导致了类转换错误,因为属性本??身被定义为字符串,即String postCode. (请注意,我从未在文档中看到类型:’clob’,但我可以从方言类中推断出clob可能是一个有效的输入)

我随后尝试将该属性定义为java.sql.Clob,即Clob postCode;,并且根本不起作用.没有错误消息,但没有任何内容持续存在于DB中.

我采取了保持Clob方法的最后一步,但使用了一个瞬态String属性,其中getter / setter尝试将瞬态String值映射到持久Clob字段.但我无法弄清楚如何将我的字符串值输入Clob. Grails不会抛出错误,但是我尝试分配后的println()从不打印.我尝试使用myClob.setString(1,theString)进行分配,但没有成功.

所以长话短说,我似乎无法在我的场景中使用Clob,我想知道是否有其他人已经看到了这个并且能够克服它.如果是这样,你能告诉我我可能做错了什么吗?

或者…有没有办法覆盖Grails选择的数据类型,以便我可以强制它将postCode类型:’text’映射到CLOB?我不熟悉Hibernate,所以如果有办法,我不知道如何去做.

旁注:在我们从Grails 1.3.7升级到2.0.1之前,我很确定类型:’text’实际上映射到Oracle中的CLOB.所以这可能是2.0.1的新功能.

解决方法

我想我在 Custom Hibernate Types的文档中找到了答案.

In that case,override the column’s SQL type using the sqlType attribute

这似乎有效.

看起来我可以使用它来强制我的数据库类型为CLOB,同时保持java类型为String.换句话说,类型可能选择DB类型和Java类型来处理字段?但是sqlType提供了更多的粒度来指定要使用的数据库类型.

所以上面的示例Domain类在我的例子中应该是这样的:

class Address {
    String number
    String postCode
    static mapping = {
        postCode sqlType: 'clob'
    }
}

我从另一个关于该主题的StackOverflow问题中收集到了这个问题(这个问题本身就让我感到困惑,而接受的答案误导了我!):

> How do I get Grails to map my String field to a Clob?

我花了一天时间试图弄明白这一切,这令人非常沮丧.所以也许我在这里的主题笔记将帮助别人避免这种体验!

虽然我在这里保留说明…这篇文章在解决如何在我的映射中更具体地进行故障排除方面证明是有用的:

> http://omaha-seattle.blogspot.com/2010/02/grails-hibernate-custom-data-type.html

有趣的代码在这里转载:

//CONFIG.GROOVY (maps a custom SixDecimal type)
grails.gorm.default.mapping = {
    'user-type'( type: SixDecimalUserType,class: SixDecimal )
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读