2015-06-12 2 views
-1

Приложение My Grails и bootstrap работают нормально, когда dbCreate="create", но когда я меняю его на dbCreate="update", я получаю ошибки создания объекта в бутстрапе. Я просто хочу, чтобы мои данные сохранялись при перезагрузке приложения. Из сообщения об ошибке, похоже, я нарушаю уникальные ограничения. Может быть, база данных не будет очищена при перезагрузке? Я пробовал "create-drop" Вот код и сообщение ниже. Любое понимание очень ценится.Почему приложение Grails не запускается, когда я устанавливаю dbCreate = "update"

development { 
    dataSource { 
     dbCreate = "create-drop" // one of 'create', 'create-drop', 'update', 'validate', '' 
     url = "jdbc:h2:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000;" 
    } 
} 


class BootStrap { 

    def init = { servletContext -> 

     def adminRole = new com.testapp.Role(authority: 'ROLE_ADMIN').save(failOnError: true) 
     def userRole = new com.testapp.Role(authority: 'ROLE_USER').save(failOnError: true) 
} 

Сообщение:

Ошибка проверки (s) произошло во время сохранения(): - ошибка поле в объекте 'com.testapp.Role' на поле 'власти': отвергнутого значение [ROLE_ADMIN] ; коды [com.testapp.Role.authority.unique.error.

сообщений по умолчанию [Свойство [{0}] класса [{1}] со значением [{2}] должно быть уникальным

ответ

1

Я думаю, вы должны быть уже созданы роли с Authority "ROLE_ADMIN" или "ROLE_USER". Во второй раз, когда вы запускаете обновление, возникает ошибка из-за уникального ограничения. Делается попытка создать роль с одинаковыми именами полномочий, и это вызывает ошибку.

Вы должны применить такое условие, чтобы, если роль уже существует, вы не должны пытаться создать ее снова.

+0

Role.findOrSave (авторитет: «ROLE_ADMIN») – albertovilches

+0

Спасибо за ответ. Вы правы, данные все еще находятся в базе данных предыдущего цикла. Теперь я запускаю пустой init {} в bootstrap при каждом запуске. Кажется, так хорошо работает, так как я хочу сохранить данные ... Еще раз спасибо. - Дэйв – Dave

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