Ошибка базы данных после обновления Grails с версии 2.3 до версии 2.4


Мое приложение grails использует в производстве встроенную базу данных h2, и недавно я решил обновить его с grails 2.3 до 2.4. В режиме разработки все прошло нормально, но после развертывания на Tomcat я упомянул, что некоторые вещи сломаны, например, есть проблемы с подсчетом пользователей, ApplicationContext не может загрузить мои службы с помощью getBean и т. Д. Я проверил журналы и обнаружил следующие ошибки:

org.springframework.beans.factory.BeanCreationException: Ошибка при создании bean-компонента с именем 'dialectDetector': не удалось вызвать метод инициализации; вложенное исключение - org.springframework.jdbc.support.MetaDataAccessException: Ошибка при извлечении DatabaseMetaData; вложенное исключение - org.h2.jdbc.JdbcSQLException: нарушение уникального индекса или первичного ключа: «PRIMARY KEY ON» «» «.PAGE_INDEX»; Оператор SQL: ALTER TABLE PUBLIC.SHIRO_USER_ROLES ADD CONSTRAINT PUBLIC.FKBA2210573552FAD9 ИНОСТРАННЫЙ КЛЮЧ (SHIRO_USER_ID) ССЫЛКИ PUBLIC.SHIRO_USER (ID) NOCHECK [23505-176] Execapter.nav.current.userconsurrent.installer. в java.util.concurrent.FutureTask $ Sync.innerRun (FutureTask.java:334) в java.util.concurrent.FutureTask.run (FutureTask.java:166) в java.util.concurrent.ThreadPoolExecutor.runorjavae (ThreadPoolExecutor.runorWorke : 1146) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:615) в java.lang.Thread.run (Thread.java:701) Вызвано: org.springframework.jdbc.support.Metaception :DataAccess Ошибка при извлечении DatabaseMetaData; вложенное исключение - org.h2.jdbc.JdbcSQLException: нарушение уникального индекса или первичного ключа: «PRIMARY KEY ON» «» «.PAGE_INDEX»; Оператор SQL: ALTER TABLE PUBLIC.SHIRO_USER_ROLES ADD CONSTRAINT PUBLIC.FKBA2210573552FAD9 FOREIGN
KEY (SHIRO_USER_ID) REFERENCES PUBLIC.SHIRO_USER (ID) NOCHECK [2350c.5-176] ... 6g. Нарушение уникального индекса или первичного ключа: "PRIMARY> KEY ON" "" ".PAGE_INDEX"; Оператор SQL: ALTER TABLE PUBLIC.SHIRO_USER_ROLES ADD CONSTRAINT PUBLIC.FKBA2210573552FAD9 FOREIGN KEY (SHIRO_USER_ID) REFERENCES PUBLIC.SHIRO_USER (ID) NOCHECK [23505-176]

Похоже, что версия драйвера H2 была обновлена ​​в grails 2.4 и несовместима со схемой базы данных из предыдущей версии. Так что я могу с этим поделать? Как мне перенести мою базу данных на новую версию H2, чтобы она работала нормально?


person Artem Zhirkov    schedule 04.07.2014    source источник


Ответы (2)


Возможно, вам потребуется обновить базу данных с помощью this. Добавьте этот Jar в свой путь к классам.

person saw303    schedule 04.07.2014
comment
Я включил эту банку в папку lib моего приложения grails и попытался развернуть. Практически ничего не изменилось, кроме того, что теперь мое приложение вообще не развертывается. Существует полный журнал процесса начальной загрузки Tomcat files.develdynamic.com/catalina.out - person Artem Zhirkov; 04.07.2014
comment
Не думаю, что это проблема H2. H2 почти одинаково в Grails 2.3 и 2.4. Новым является то, что Grails использует Hibernate4 в качестве подключаемого модуля по умолчанию. Что вы использовали в Grails 2.3? - person saw303; 04.07.2014
comment
Я не обновлял спящий режим до 4-й версии, использую 3.6.10. И я думаю, что на самом деле это проблема H2, потому что довольно похожая проблема недавно обсуждалась в списке рассылки H2 h2-database.66688.n3 .nabble.com / - person Artem Zhirkov; 04.07.2014

Это определенно проблема H2. См. Эту ветку H2, где Томас Мюллер находит проблему.

Теперь мне нужно выяснить, как исключить H2 версию 176 из глобального списка Grails и использовать 175, поскольку все, что после 176, является бета-версией!

person user748669    schedule 10.09.2014