我在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中它认为类型是我的新值,但是更新永远不会持久化。没有例外,对象验证,任何日志中都没有。可能导致这种情况的任何线索?
干杯!
答案 0 :(得分:0)
正确... Slaps Face
我在帖子中没有包含的内容是它们更新实际上是在服务中发生的(使用@Transactional注释,我还使用命令对象在控制器中进行了一些验证.Command对象通过查看
是否返回非null来检查组ID是否有效def group = AppGroup.read(id).
我不确定为什么,但似乎因为这个对象在会话中,这是在事务结束时被保存的那个并且它不脏。如果我完成它后丢弃这个组,那么一切正常。
不知道为什么会这样,但是嘿,我解决了我的问题。可能会试着看看exists()是否更适合......