我在项目中添加了一个新的域类,当调用该方法向表中添加新实例时,抛出一个奇怪的错误。
这是电话:(如果没有简单的保存和打印错误)
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框架自动生成的字段。
我尝试删除该表并重新创建它但仍然遇到相同的错误。 这可能是一个错误吗?我不认为我做错了,因为这不是我在项目中的第一个表或关系。
任何帮助将不胜感激。
答案 0 :(得分:2)
我找到的解决方案不是最有效但解决了我的问题。
这看起来像Grails / Hibernate错误,有时在您添加域类时会发生,或者在项目运行时修改它或它们的关系。
在这个question中,他们会询问相同的错误,但使用字段id
。我试过这个solution并且工作:
如果您已经有备份,则不需要步骤1和2。
此解决方案的问题是数据库很大的时候。主要需要大约20-30分钟来备份或从备份重新创建数据库。
答案 1 :(得分:1)
如果您不需要使用版本
static mapping = {
version false
}
如果确实需要,请尝试
static mapping = {
version true
}
您可以像这样设置默认值
static mapping = {
PROPERTY_NAME defaultValue: DESIRED_VALUE
}