使用eachWithIndex引导域

时间:2017-07-31 15:49:27

标签: grails grails-domain-class

另一个令人头痛的问题:-(有人请帮忙。我只是想在我的Grails 3项目的bootstrap文件中使用eachWithIndex批量创建域实例。

这是我的域名类......

package ttt_server

class TttPriority {

    String name
    int order
    Date dateCreated

    static constraints = {
        name blank: false, nullable: false
        order blank: false, nullable: false
        dateCreated nullable:true, blank:true
    }

}

这是我用于批量创建的引导代码...

["Mortal","Major","Critical","Minor","Nice To Have"].eachWithIndex{ name, idx ->
    new TttPriority(name: name, order: idx).save(flush:true)
}

我快要把头发拉出来了。

这是错误......

  

2017-07-31 16:30:41.755 ERROR --- [main] o.h.engine.jdbc.spi.SqlExceptionHelper:SQL语法中有错误;查看与您的MySQL服务器版本对应的手册,以便在第1行使用“order”(0,'Mortal',0)附近的正确语法   2017-07-31 16:30:41.817 ERROR --- [main] o.s.boot.SpringApplication>:应用程序启动失败

     

org.springframework.jdbc.BadSqlGrammarException:Hibernate操作:无法执行语句;糟糕的SQL语法[不适用];嵌套异常是com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法中有错误;查看与您的MySQL服务器版本对应的手册,以便在第1行使用“order”(0,'Mortal',0)附近的正确语法       在......

2 个答案:

答案 0 :(得分:2)

order是一个SQL关键字。您需要重命名或重新映射该属性。

static mapping = {
    order column: "my_order"
}

答案 1 :(得分:1)

因为 order 是保留字,所以您必须为列使用其他名称。或者用反引号包围你的列名

实施例

static mapping = {
    order column: "order_col"
}

static mapping = {
    order column: "`order`"
}