即使使用flush:true参数,Grails域也不会持久化

时间:2015-06-12 04:03:22

标签: grails gorm

我很难使用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声明?

1 个答案:

答案 0 :(得分:1)

问题可能是您手动设置了ID - 这有点危险,因为这意味着如果ID已经存在,您将执行update而不是insert(假设唯一/主键)。尝试让数据库处理id生成,你应该没问题。