【问题标题】:Grails org.h2.jdbc.JdbcSQLException Value too long for columnGrails org.h2.jdbc.JdbcSQLException 列的值太长
【发布时间】:2016-01-29 14:36:50
【问题描述】:

我是 Grails 的新手,不太熟悉 GORM 如何将列映射到 jdbc 实现。 基本上我有以下错误:

org.h2.jdbc.JdbcSQLException

消息:

值太长列 “关键词BINARY(255)”: “X'aced0005737200116a6176612e7574696c2e486173684d61700507dac1c31660d103000246000a6c6f6164466163746f724900097468726573686f6c647870 ...(1871)”; SQL语句:插入用户(id、版本、email、face_url、keywords、name、phone、tags、terminals、url、weibo_id、weibo_name)值(null、?、?、?、?、?、?、?、? , ?, ?, ?) [22001-176]

我尝试了几种方法来改变这个KEYWORD属性的保存方式,比如

static constraints = {
    ...
    keywords(type:'serializable')
}

我也尝试过“maxSize:10000”、“type:'text'”以及这两者的组合。但没有一个成功,错误是完全一样的。 "keyword" 属性只是 key=String, value=Double 的 HashMap。

一般来说,我只是不确定让 Grails(Hibernate) 存储哈希图的最佳做法是什么。我相信在某个地方必须有一个简单的设置,而不是自己为 hibernate 或 grails 实现用户定义的持久性方式。而且我想知道为什么每次它似乎都被转换为二进制(我确实重新运行了应用程序以让数据库删除并创建所有表)。

更多细节,我的控制器只是脚手架。 Grails 版本是 2.4.4。开发环境使用H2db。

感谢任何建议!

【问题讨论】:

    标签: hibernate grails h2


    【解决方案1】:

    我猜你在静态闭包中定义关键字是错误的,你应该把它写成这样的静态映射

    static mapping = {
        keywords sqlType:'text'
    }
    

    希望这会有所帮助。谢谢

    【讨论】:

    • 抱歉,这是我在问题中的拼写错误。它在“静态约束={...}”中。请看我编辑的帖子。不过还是谢谢你提醒我:)
    • 我已经更新了我的答案,也请尝试这种方式。它应该主要工作。也可以尝试删除您的表格并让域再次创建您的表格
    • 我终于发现我错误地认为“sqlType:text”应该算作“静态约束”而不是“静态映射”。通过像您一样将其放置在正确的位置,它现在可以正常工作了。谢谢!
    猜你喜欢
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 2022-06-22
    • 2020-04-23
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多