2012-02-13 92 views
6

我的领域类看起来是这样的:如何让Grails将我的字符串字段映射到Clob?

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会想出使用CLOB而不是基于我传递的最大范围约束一个足够大的值VARCHAR,而不是我弄在控制台此错误消息:

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

我需要在映射的明确则sqlType?我尝试使用不同的maxSize值,并将其完全保留,没有任何区别。另外加入sqlType: clob或不起作用。

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

回答

9

找到了答案。没有什么像reading the documentation找到的东西了。

奏效正在改变对CLOB列映射到

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

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

你可以使用Clob吗?

class Foo 
{ 
Clob stuff 
} 
+0

这将是做这件事,我猜。我真的很想看到一个答案,它允许我在域对象中使用一个字符串。必须有一个用户类型。 – 2012-02-14 02:03:57

3

的变化,我知道一切都太迟了,但以备将来参考:

你只是要添加映射

static mapping = { stuff type:'text' } 

就是这样,grails会将数据类型更改为clob或任何其他基于您所使用的数据库的大型字符串。

0

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

但这种方式更适合我的Grails 2.2.0:

static mapping = { stuff sqlType: 'clob' } 
相关问题