我在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/