【问题标题】:How do I get Grails to map my String field to a Clob?如何让 Grails 将我的 String 字段映射到 Clob?
【发布时间】:2012-02-13 22:07:35
【问题描述】:

我的域类如下所示:

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 也不起作用。

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

【问题讨论】:

    标签: grails groovy orm db2 grails-orm


    【解决方案1】:

    找到了答案。没有什么比 reading the documentation 更能找到答案了。

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

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

    【讨论】:

      【解决方案2】:

      我知道为时已晚,但供以后参考:

      你只需要添加一个映射

          static mapping = {  stuff type:'text' }
      

      仅此而已,grails 将数据类型更改为 clob 或任何其他可以根据您正在使用的数据库保存大字符串的其他类型。

      【讨论】:

        【解决方案3】:

        我在我的 Grails 项目中使用了“Clob 数据”,效果很好。

        你可以使用 Clob 吗?

        class Foo
        {
         Clob stuff
         }
        

        【讨论】:

        • 我猜这是一种方法。我真的很想看到一个允许我在域对象中使用字符串的答案。为此必须有一个 UserType。
        【解决方案4】:

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

        但这适用于我的 Grails 2.2.0:

        static mapping = { stuff sqlType: 'clob' }
        

        【讨论】:

          猜你喜欢
          • 2011-02-10
          • 2018-07-29
          • 2017-01-15
          • 2014-03-09
          • 1970-01-01
          • 2015-10-27
          • 2016-11-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多