2012-05-29 2 views
0

Я хочу создать общий код для обновления объектов. Вот что я придумал:Почему идентификатор объекта увеличивается после слияния? [Grails]

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. А как я могу это исправить

+1

ОбновленEntity отдельный объект? Я думаю, вам нужно прочитать, на что действительно используется слияние. http://grails.org/doc/latest/ref/Domain%20Classes/merge.html – Gregg

+0

Grails - это динамический язык и уже имеет множество встроенных «общих кодов» для обработки таких вещей. Не могли бы вы объяснить, что вы пытаетесь сделать и почему? –

+0

@Gregg: yes, updatedEntity отсоединен. – Roman

ответ

0

Я обнаружил, что послужило причиной? описанное поведение:. мой параметр id всегда экземпляр String, поэтому, когда я прохожу ID = 1, фактическое значение идентификатора «1», и это не рассматривается как спящий режим id

Кроме того, чтобы сделать эту работу Мне пришлось переопределить version собственности.