grails - 更新到grails域不要

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

在 Controller 的“更新”方法中,我尝试更新“MyDomain”对象。我可以很好地更新与域关联的属性,但是当我尝试更改实例本身的任何属性(名称,标识符或类型)时,更改不会持久。 Controller 代码:
def update(Long id) {
  --- 
  def myDomain = MyDomain.get(id)
  myDomain.type = 'DIFFERENT TYPE'
  myDomain.save(flush:true, failOnError:true)
}

但是,数据库中的信号仍具有与创建时相同的类型。为了尝试遵循逻辑,我向域类添加了一个beforeUpdate方法,该方法可以打印出该类型,并且可以看到它正在被调用,并且在beforeUpdate中,它认为该类型是我的新值,但是更新从未持久。没有异常,对象有效,任何日志中都没有。任何线索可能是什么原因造成的?

干杯!

最佳答案

对...拍打脸

我在那篇文章中没有提到的是它们的更新实际上是在服务中进行的(带有@Transactional注释,Im还使用命令对象在 Controller 中进行了更早的验证。Command对象检查组)通过查看ID是否为非null来返回id是否有效

def group = AppGroup.read(id).

我不确定为什么,但是似乎由于该对象在 session 中,因此它是在事务结束时保存的对象,并且它并不脏。如果我在处理完该组后就将其丢弃,那么一切正常。

不知道为什么会这样,但是嘿,解决了我的问题。可能会尝试查看是否存在更适合...

关于grails - 更新到grails域不要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28347888/

相关文章:

unit-testing - Grails Spock 单元测试在本地通过但在 CI 环境中失败

rest - Grails Spring Security REST 插件 - token 存储失败

grails - Grails GORM有条件的左外部联接

grails - Grails 2.2.4:在MySQL 5.5中创建列默认值

grails - 如何使用 <f :field> tag on GSP in grails 3. 3.11 处理嵌入属性?

grails - 在Grails中实现 self 引用的一对多关系的最佳方法是什么?

ruby-on-rails-3 - 在 SOA 架构中使用 SPDY

unit-testing - chalice : Spock : Unit testing GORM domain class hooks

grails - 哪个更好:使用 Multi-Tenancy 插件或不同的环境?

hibernate - Grails批量读取优化