【发布时间】:2012-05-29 16:52:51
【问题描述】:
我想创建一个用于更新实体的通用代码。这是我想出的:
def update(id, Object updatedEntity) {
def entity = findById(id)
if (entity) {
updatedEntity.id = id
def mergedEntity = updatedEntity.merge()
if (mergedEntity) {
return mergedEntity
} else {
throw new ValidationException("Cannot update.", mergedEntity.errors)
}
} else {
throw new IllegalArgumentException("No ${domainClass.getSimpleName()} with id=${id} found.")
}
}
为什么mergedEntity 总是增加id 值(我的意思是如果updatedEntity.id = 1,那么mergedEntity.id 将是2。我该如何解决?
【问题讨论】:
-
updatedEntity 是一个分离的实体吗?我认为您需要阅读合并实际用于什么。 grails.org/doc/latest/ref/Domain%20Classes/merge.html
-
Grails 是一种动态语言,并且已经有很多内置的“通用代码”来处理这样的事情。你能解释一下你想做什么以及为什么?
-
@Gregg:是的,updatedEntity 已分离。
-
@MichaelJ.Lee:我有很多实体类型。对于所有这些,我需要具有基本 CRUD 和更多内容的服务类。我想将尽可能多的通用逻辑移至父服务类(GenericService)。子类只会从参数创建一个实体,并将其传递给对应的父方法。让我们考虑
UserService#update()。它的代码应该是这样的:def updatedUser = new User(name: params.newName, age: params.newAge); super.update(params.id, updatedUser).
标签: grails groovy grails-orm