更新到 grails 域不坚持
Update to grails domain don'tpersist
我正在使用 grails 2.3.8
我们有以下域 classes:
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]
}
在我的控制器的 'update' 方法中,我试图更新一个 'MyDomain' 对象。我可以很好地更新与域关联的属性,但是当我尝试更改实例本身的任何属性(名称、标识符或类型)时,更改不会持续存在。控制器代码:
def update(Long id) {
---
def myDomain = MyDomain.get(id)
myDomain.type = 'DIFFERENT TYPE'
myDomain.save(flush:true, failOnError:true)
}
但是数据库中的信号仍然与创建时的类型相同。为了尝试遵循逻辑,我在域 class 中添加了一个 beforeUpdate 方法来打印出类型,我可以看到它正在被调用,并且在 beforeUpdate 中它认为该类型是我的新值,但是更新永远不会坚持。没有异常,对象验证,并且任何日志中都没有。知道是什么原因造成的吗?
干杯!
对... 打脸
我没有包含在 post 中的位是它们更新实际上发生在服务中(使用 @Transactional 注释,我还使用命令对象在早些时候进行一些验证控制器。Command 对象通过
返回的非空值来检查组 ID 是否有效
def group = AppGroup.read(id).
我不确定为什么,但似乎因为这个对象在会话中,所以它是在事务结束时保存的对象,而且它不是脏的。如果我在完成后丢弃该组,那么一切正常。
不确定这是为什么,但是嘿嘿,解决了我的问题。可能会尝试看看 exists() 是否更合适...
我正在使用 grails 2.3.8
我们有以下域 classes:
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]
}
在我的控制器的 'update' 方法中,我试图更新一个 'MyDomain' 对象。我可以很好地更新与域关联的属性,但是当我尝试更改实例本身的任何属性(名称、标识符或类型)时,更改不会持续存在。控制器代码:
def update(Long id) {
---
def myDomain = MyDomain.get(id)
myDomain.type = 'DIFFERENT TYPE'
myDomain.save(flush:true, failOnError:true)
}
但是数据库中的信号仍然与创建时的类型相同。为了尝试遵循逻辑,我在域 class 中添加了一个 beforeUpdate 方法来打印出类型,我可以看到它正在被调用,并且在 beforeUpdate 中它认为该类型是我的新值,但是更新永远不会坚持。没有异常,对象验证,并且任何日志中都没有。知道是什么原因造成的吗?
干杯!
对... 打脸
我没有包含在 post 中的位是它们更新实际上发生在服务中(使用 @Transactional 注释,我还使用命令对象在早些时候进行一些验证控制器。Command 对象通过
返回的非空值来检查组 ID 是否有效def group = AppGroup.read(id).
我不确定为什么,但似乎因为这个对象在会话中,所以它是在事务结束时保存的对象,而且它不是脏的。如果我在完成后丢弃该组,那么一切正常。
不确定这是为什么,但是嘿嘿,解决了我的问题。可能会尝试看看 exists() 是否更合适...