Grails 为什么合并后实体id会增加?[圣杯]

Grails 为什么合并后实体id会增加?[圣杯],grails,groovy,gorm,Grails,Groovy,Gorm,我想创建一个更新实体的通用代码。以下是我的想法: def update(id, Object updatedEntity) { def entity = findById(id) if (entity) { updatedEntity.id = id def mergedEntity = updatedEntity.merge() if (mergedEntity) { return mergedEntity

我想创建一个更新实体的通用代码。以下是我的想法:

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。我已经找到了导致上述行为的原因:我的id参数始终是字符串的一个实例,因此当我传递id=1时,实际的id值是1,它不会被视为hibernate id


除此之外,为了实现这一点,我还必须重写version属性。

updateEntity是分离的实体吗?我认为您需要仔细阅读merge的实际用途。Grails是一种动态语言,已经有很多内置的“通用代码”来处理类似的事情。你能解释一下你想做什么以及为什么吗?@Gregg:是的,updatedEntity是分离的。@MichaelJ.Lee:我有很多实体类型。对于所有这些,我需要带有基本CRUD的服务类和其他东西。我想将尽可能多的公共逻辑转移到父服务类GenericService。子类将仅从参数创建一个实体,并将其传递给相应的父方法。让我们考虑UsService UpjDATE。它的代码应该是这样的:def updateuser=newusername:params.newName,age:params.newAge;super.updateparams.id,updateUser。