grails中的列类型不起作用

Posted

技术标签:

【中文标题】grails中的列类型不起作用【英文标题】:Column type in grails not working 【发布时间】:2015-12-11 08:22:21 【问题描述】:

这是我的模型。

class Review 
String review
Date date
int numberOfComments
String status
static belongsTo = [game:Game, user:User]
static hasMany=[comment:Comment]
static mapping =
    numberOfComments    defaultValue: "0"
    review type: 'text'


static constraints = 


当我输入 400 个字符的文本时,它产生了这个错误

我不知道为什么评论类型:“文本”不起作用。有人可以帮忙吗?

【问题讨论】:

【参考方案1】:

事实上,grails GORM 有时在更新列类型时会出现问题,尤其是当它们包含任何数据时。尝试删除数据库中选定的列/表并重新启动应用程序。

还要确保您在 conf/DataSource.groovy 中进行了更改

dbCreate = "更新"

dbCreate = "创建-删除"

已编辑:首先我没有注意到您使用的是 h2 db。请查看this answer 了解 h2 数据库中的文本类型。

【讨论】:

我真的需要把它改成create-drop吗?我不想丢失数据库中的所有内容,这有什么区别? 在开发中我使用'create-drop',在生产中我使用'update'。这是确保列/字段具有所需类型的最简单方法。 所以我改为 create-drop 然后静态映射 = review type : 'clob' ? 首先更改为create-drop,不要更改映射。 h2 可能将此字段创建为常规 varchar。如果重新启动后它仍然不起作用,请将映射更改为 clob。 你也在生产中使用 h2 吗?如果在移动到其他环境时使用 clob 类型,您可能会遇到问题【参考方案2】:

也许你可以使用 sqlType 来代替

class Email 

    String body

    static mapping = 
        body sqlType: "longtext"
    

【讨论】:

【参考方案3】:

您可以将其设为blob 类型

static mapping = 
    review (type:’blob’)

注意type 是 Grails 2.0 的默认属性,如果您使用较新版本的 grails,您应该使用 sqlType

在这里查看:http://grails.github.io/grails-doc/latest/ref/Database%20Mapping/column.html

【讨论】:

它说 Message: java.lang.String cannot be cast to java.sql.Blob

以上是关于grails中的列类型不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Grails 发送邮件不起作用

grails验证嵌套命令对象不起作用

Grails 数据库迁移插件 updateOnStart 不起作用

Grails 2.4.3 应用程序自动重新加载不起作用

Grails、Vaadin 7 和 SpringSecurity:授权不起作用

升级后 Grails 验证不起作用