更新到grails域名不能使用

时间:2015-02-05 15:32:30

标签: grails gorm grails-domain-class

我在grails工作2.3.8

我们有以下域类:

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]
}

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

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

但是,数据库中的信号仍然与创建时的信号类型相同。为了尝试遵循逻辑,我将一个beforeUpdate方法添加到打印出类型的域类中,我可以看到它被调用,在beforeUpdate中它认为类型是我的新值,但是更新永远不会持久化。没有例外,对象验证,任何日志中都没有。可能导致这种情况的任何线索?

干杯!

1 个答案:

答案 0 :(得分:0)

正确... Slaps Face

我在帖子中没有包含的内容是它们更新实际上是在服务中发生的(使用@Transactional注释,我还使用命令对象在控制器中进行了一些验证.Command对象通过查看

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

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

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