2012-02-13 104 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' } 
相關問題