我的域类看起来像这样:
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: clob
或sqlType: text
也不起作用。
我使用IBM DB2-Express在Grails 1.3.7上。
答案 0 :(得分:10)
答案 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' }