我很难使用Grails domain
类插入新记录:
Integer lastId = AdjustmentCode.createCriteria().get {
projections { max "id" }
} as Integer
def adjustmentCode = new AdjustmentCode()
adjustmentCode.setId(String.valueOf(lastId + 1))
adjustmentCode.setDescription(description)
adjustmentCode.setType(type)
adjustmentCode.setStatus(status)
println "before saving"
def status_e = adjustmentCode.save(flush: true, failOnError: true)
println "status_e: $status_e"
if(!status_e) { println adjustmentCode.errors.allErrors() }
println "after saving"
控制台显示:
before saving
status_e: AdjustmentCode : 14
after saving
adjustmentCode.save(flash: true, failOnError: true)
没有任何问题,我提供了所有required
(以及所有nullable
个)。并且它不会返回任何error
条消息,也不会返回println adjustmentCode.errors.allErrors()
行。什么似乎是错误,为什么它不保存?
编辑1:由于zoran119建议启用sql logging
,我发现.save()
函数会生成{{1}语句,而不是update
语句。现在我明确告诉insert
函数它应该使用.save ()
参数创建insert
sql语句:
insert
但它仍会执行def status_e = adjustmentCode.save(flush: true, failOnError: true, insert: true)
^^^^^^^^^^^^
查询!我应该怎么做才能创建update
声明?
答案 0 :(得分:1)
问题可能是您手动设置了ID - 这有点危险,因为这意味着如果ID已经存在,您将执行update
而不是insert
(假设唯一/主键)。尝试让数据库处理id生成,你应该没问题。