2013-05-30 2 views
0

я копил объекты в моей базе данных в Граалей со следующей стенографии ...Grails сохранить метод возвращения нулевой

def jim = new User(name: "Jim", 
       emailAddress: "[email protected]", 
       backOfficeUser: false, 
       dateCreated: Instant.now(), 
       lastUpdated: Instant.now(), 
       passwordHash: BCrypt.hashpw("secret123", BCrypt.gensalt())).save(flush: true) 

Это все, казалось, прекрасно работать, пока что-то не вызвало .save() и сохранить (флеш : true) возвращают значение null. Если я изменяю заявление к этому он отлично работает, однако ...

def jim = new User(name: "Jim", 
      emailAddress: "[email protected]", 
      backOfficeUser: false, 
      dateCreated: Instant.now(), 
      lastUpdated: Instant.now(), 
      passwordHash: BCrypt.hashpw("secret123", BCrypt.gensalt())) 
      jim.save(flush:true) 

Экземпляр Джим тут же иметь идентификатор, выданный последовательности базы данных и сохраняется, когда экономия называется.

+2

Попробуйте добавить 'failOnError: true' в' save' для первого случая, чтобы увидеть, есть ли какая-либо ошибка проверки. – dmahapatro

ответ

3

В grails save возвращает сохраненный экземпляр, если сохранение было успешным, если нет - оно вернет null. См. Раздел описания save reference. Добавьте failOnError: true, чтобы проверить, не прошла ли проверка.

1

Оказалось, что другой разработчик в команде переопределил метод сохранения, чтобы повторить попытку, когда мы натолкнулись на конкретный тупик, который может иметь наш поставщик базы данных при высокой нагрузке (Percona).

В этом новом методе сохранения мы больше не возвращали экземпляр.

Смежные вопросы