如何让Grails将我的String字段映射到Clob?

时间:2012-02-13 22:07:35

标签: grails groovy orm db2 gorm

我的域类看起来像这样:

package com.initech.tps

class Foo
{
    String stuff

    static mapping = {
        // mapping to a legacy table as opposed to letting Grails create it
        table name: 'FOO', schema: 'TPS'
        id generator: 'sequence', params: [sequence: 'MY_SEQ'], 
            column: 'FOO_ID', sqlType: 'integer' 
        foo column: 'STUFF'
    }

    static constraints = {
        stuff(nullable: true, maxSize: 40000)
    }
} 

我的印象是Grails会根据我为maxSize约束传递足够大的值而使用CLOB而不是VARCHAR,而是在控制台中收到此错误消息:

org.hibernate.HibernateException: Wrong column type in FOO for column STUFF. 
Found: clob, expected: varchar(40000)

我是否需要在映射上使用显式的sqlType?我尝试使用不同的maxSize值,并将其完全删除,没有区别。此外,添加sqlType: clobsqlType: text也不起作用。

我使用IBM DB2-Express在Grails 1.3.7上。

4 个答案:

答案 0 :(得分:10)

找到答案。没有像reading the documentation那样找到一些东西。

有效的改变是将clob列的映射更改为

foo column: 'STUFF', type: "text"

答案 1 :(得分:4)

我知道为时已晚,但是为了将来参考:

你只需要添加一个映射

    static mapping = {  stuff type:'text' }

就是这样,grails会将数据类型更改为clob或任何其他可以容纳您正在使用的数据库中的大字符串的内容。

答案 2 :(得分:0)

我在Grails项目中使用了“Clob数据”并且工作正常。

你能用Clob吗?

class Foo
{
 Clob stuff
 }

答案 3 :(得分:0)

虽然实际的Oracle DB列类型是CLOB,但type:'text'在DataSource.groovy中将dbCreate设置为validate时没有帮助。

但这适用于我的Grails 2.2.0:

static mapping = { stuff sqlType: 'clob' }