【问题标题】:GORM Not Recognizing type: 'text' MappingGORM 无法识别类型:“文本”映射
【发布时间】:2017-07-18 15:24:44
【问题描述】:

这个问题与this post 类似——但答案不适用于此处。我目前只从事开发工作并配置为dbCreate: create-drop 和url: jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE

使用 Grails 3.0.11 – GORM 似乎无法识别 type:'text' 映射。这是我的模型:

package mypackage

class Text extends Object {

    String body
    Media image

    boolean textFirst = true

    static constraints = {
        image nullable:true
    }

    static mapping = {
        body type: 'text'
    }
}

引导一些数据,我被抛出这个错误:

ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper - Value too long for column "BODY VARCHAR(255)": "'<p>some copy... (1222)"; SQL statement:
insert into object (id, date_created, description, heading, last_updated, title, two_col, body, image_id, text_first, class) values (null, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'mypackage.Text')

我的理解是 mapping 到 type:text 应该创建 CLOB 类型的变量,它不会自动限制为最大大小 255。


尝试的解决方案

  1. grails clean - 应用程序已清理,没有成功
  2. grails clean-all - 这不是 Grails 3+ 方法(不起作用)
  3. grails clean --refresh-dependencies – 清理,但没有成功
  4. 交换模型中static constraints和static mapping的顺序,没有成功
  5. 在我的模型约束中添加了body maxSize: 5000,没有成功
  6. grails url-mappings-report 奇怪地完成了引导程序而没有抛出错误。


编辑 1

这可能与继承有关——Text 类当前扩展了 Object。如下更改Text模型,Bootstrapping成功。谁能给我一些见解?

package mypackage

class Text {

    String body
    Media image

    boolean textFirst = true


    static constraints = {
        image nullable:true
    }

    static mapping = {
        body type: 'text'

    }
}

这是 mypackage.Object:

package mypackage

class Object {

    String title
    String heading
    String description

    Date dateCreated
    Date lastUpdated

    boolean twoCol = false

    static constraints = {
        heading nullable: true, maxSize: 3000
        description nullable: true, maxSize: 500
    }

    static mapping = {
        version false
    }
}


编辑 2

将body 容器重命名为content、grails clean,它现在似乎可以工作了。仍然不确定发生了什么,可能是某种缓存问题(?)...

任何帮助都很棒!谢谢大家:)

【问题讨论】:

    标签: grails grails-orm grails-domain-class


    【解决方案1】:

    请试试这个

    static mapping = {
            body sqlType: 'text'
        }
    

    【讨论】:

    • 没有成功——同样的错误被抛出。即使在清理应用程序之后。谢谢
    • java/groovy 中的每个类默认都扩展了 Object 类。您应该将该类重命名为其他名称。还要检查“text”是否不是您正在使用的数据库的保留字。
    • 我尝试重命名 Object 类,但无法让程序运行。将body 重命名为content,它现在似乎可以工作了。感谢您的帮助!
    【解决方案2】:

    请试试这个

    静态映射 = { 正文类型:“文本” }

    【讨论】:

    • 这是问题中给出的映射。
    猜你喜欢
    • 2022-12-26
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 2019-08-21
    • 2016-03-22
    • 1970-01-01
    • 2021-12-09
    • 2017-04-04
    相关资源
    最近更新 更多