2015-02-05 123 views
0

我在Grails的2.3.8更新到Grails领域don'tpersist

我们有以下域类工作'MyDomain'对象。我可以更新与域关联的属性,但是当我尝试更改实例本身(名称,标识符或类型)上的任何属性时,更改不会持续。控制器代码:

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

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

干杯!

+0

有些错误?如果否,请尝试beforeInsert()而不是beforeUpdate() – Koloritnij 2015-02-05 15:50:06

+0

不允许有错误。只是试着检查,似乎认为对象不脏。 – DJOodle 2015-02-05 17:15:28

回答

0

右... 巴掌脸

的位,我并没有在该职位包括为他们更新实际上是在服务中发生的事情(与@Transactional注释,和Im也使用命令对象做一些验证早些时候在控制器中。Command对象检查组ID是有效的,如果一个非空被

def group = AppGroup.read(id). 

回来看我不知道为什么,但似乎因为这对象在会话中,这是在交易结束时保存的那个会话,事实并非如此脏。如果一旦我完成了这个组,我就放弃这个组,然后一切正常。

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