更新到 grails 域不坚持

Update to grails domain don'tpersist

我正在使用 grails 2.3.8

我们有以下域 classes:

abstract class GroupItem {
  static belongsTo = [group:AppGroup]
  static mapping = {
    tablePerHierarchy = false
  }
}

class MyDomain extends GroupItem {
  String name
  String type
  int Identifier

  static hasMany = [attributes:Attribute]

  static mapping = {
    attributes cascade: 'all-delete-orphan'
  }
}

class Attribute {
  String name
  String value
  static belongsTo = [myDomain:MyDomain]
}

在我的控制器的 'update' 方法中,我试图更新一个 'MyDomain' 对象。我可以很好地更新与域关联的属性,但是当我尝试更改实例本身的任何属性(名称、标识符或类型)时,更改不会持续存在。控制器代码:

def update(Long id) {
  --- 
  def myDomain = MyDomain.get(id)
  myDomain.type = 'DIFFERENT TYPE'
  myDomain.save(flush:true, failOnError:true)
}

但是数据库中的信号仍然与创建时的类型相同。为了尝试遵循逻辑,我在域 class 中添加了一个 beforeUpdate 方法来打印出类型,我可以看到它正在被调用,并且在 beforeUpdate 中它认为该类型是我的新值,但是更新永远不会坚持。没有异常,对象验证,并且任何日志中都没有。知道是什么原因造成的吗?

干杯!

对... 打脸

我没有包含在 post 中的位是它们更新实际上发生在服务中(使用 @Transactional 注释,我还使用命令对象在早些时候进行一些验证控制器。Command 对象通过

返回的非空值来检查组 ID 是否有效
def group = AppGroup.read(id).

我不确定为什么,但似乎因为这个对象在会话中,所以它是在事务结束时保存的对象,而且它不是脏的。如果我在完成后丢弃该组,那么一切正常。

不确定这是为什么,但是嘿嘿,解决了我的问题。可能会尝试看看 exists() 是否更合适...