Grails / Hibernate:Field"版本"没有默认值

时间:2015-12-16 09:56:40

标签: hibernate grails

我在项目中添加了一个新的域类,当调用该方法向表中添加新实例时,抛出一个奇怪的错误。

这是电话:(如果没有简单的保存和打印错误)

if (!distributor.save()) {
    flash.error = message(code: 'unexpectedError')
    distributor.errors.each {
        println it  
    }
}

这是堆栈跟踪:(仅由部分引起)

Caused by: java.sql.SQLException: Field 'version' doesn't have a default value

是否有人遇到此错误?我不明白为什么会发生这种情况,因为version是Grails / Hibernate框架自动生成的字段。

我尝试删除该表并重新创建它但仍然遇到相同的错误。 这可能是一个错误吗?我不认为我做错了,因为这不是我在项目中的第一个表或关系。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

我找到的解决方案不是最有效但解决了我的问题。

这看起来像Grails / Hibernate错误,有时在您添加域类时会发生,或者在项目运行时修改它或它们的关系。

在这个question中,他们会询问相同的错误,但使用字段id。我试过这个solution并且工作:

  1. 删除有问题的表格。
  2. 备份数据库。
  3. 删除数据库
  4. 从备份重新创建数据库
  5. 运行项目以创建有问题的表
  6. 如果您已经有备份,则不需要步骤1和2。

    此解决方案的问题是数据库很大的时候。主要需要大约20-30分钟来备份或从备份重新创建数据库。

答案 1 :(得分:1)

如果您不需要使用版本

static mapping = {
        version false
}

如果确实需要,请尝试

static mapping = {
        version true
}

您可以像这样设置默认值

static mapping = {
        PROPERTY_NAME defaultValue: DESIRED_VALUE
}