从这两个线程,
LONG过时且不赞成使用.甲骨文说,
不要创建包含LONG列的表.请改用LOB列(CLOB,NCLOB).仅支持LONG列以实现向后兼容性.
Oracle还建议您将现有的LONG列转换为LOB列.与LONG列相比,LOB列的限制要少得多.此外,LOB功能在每个版本中都得到了增强,而LONG功能在几个版本中都是静态的.
但是,如果没有此处提到的解决方法,您无法从远程数据库中读取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)
}
}
Run Code Online (Sandbox Code Playgroud)
我的印象是Grails会根据我为maxSize约束传递足够大的值而使用CLOB而不是VARCHAR,而是在控制台中收到此错误消息:
org.hibernate.HibernateException: Wrong column type in FOO for column STUFF.
Found: clob, expected: varchar(40000)
Run Code Online (Sandbox Code Playgroud)
我是否需要在映射上使用显式的sqlType?我尝试使用不同的maxSize值,并将其完全删除,没有区别.还添加sqlType: clob或sqlType: text不起作用.
我在Grails 1.3.7上,使用IBM DB2-Express.