Hibernate 控制器中的GORM行为

Hibernate 控制器中的GORM行为,hibernate,grails,gorm,Hibernate,Grails,Gorm,我在Grails控制器中遇到了一个问题。控制器的逻辑是(通过服务调用)对某些数据执行检查,然后如果该服务返回true,则保存数据。但是,当检查发生并失败时,数据仍然保持不变 以下是基本控制器操作代码(criteria.isMet和criteria.msg是服务方法通过映射返回的值): stacktrace指向哪里?如果您正在对同一个表/域对象执行查询,hibernate将进行刷新,以尝试持久化脏对象(您新创建的对象将是脏对象)并在那时保存它。()我将代码修改为我在问题中发布的代码,它不再抛出任何

我在Grails控制器中遇到了一个问题。控制器的逻辑是(通过服务调用)对某些数据执行检查,然后如果该服务返回true,则保存数据。但是,当检查发生并失败时,数据仍然保持不变

以下是基本控制器操作代码(criteria.isMet和criteria.msg是服务方法通过映射返回的值):


stacktrace指向哪里?如果您正在对同一个表/域对象执行查询,hibernate将进行刷新,以尝试持久化脏对象(您新创建的对象将是脏对象)并在那时保存它。()我将代码修改为我在问题中发布的代码,它不再抛出任何错误。但是,它仍然保存对象(当我不希望它保存时)。有没有办法阻止这种行为?我尝试在object.name=“object”之后执行object.lock(),但这确实会引发一个错误,即当项目未被持久化时无法锁定,这非常有意义。有什么想法吗?如果通过调用else块中的
object.discard()
未满足条件,则该对象将被删除。即使在else块中使用object.discard,该对象仍会保存。我们是否确定未满足条件?
    def save() {
    {
         def object = new Domain(params)
         object.name = "OBJECT"
         def criteria = service.isCriteriaMet(object)
         if(criteria.isMet){
             object.save(flush: true)
             render(view: "show", model: [objectInstance: object])
         }else{
             render(view: "create", model: [objectInstance: object])
             object?.errors?.rejectValue("id", "default.message", [message(code: messageLabel)] as Object[], criteria.msg)
         }
    }