将Grails从2.3升级到2.4版本后出现数据库错误

时间:2014-07-04 11:42:32

标签: grails h2 grails-2.3


我的grails应用程序在生产中使用h2嵌入式数据库,最近我决定将它从grails 2.3升级到2.4。它在开发模式下运行良好,但在部署到tomcat后我提到有些东西坏了,例如计算用户有问题,ApplicationContext无法用getBean等加载我的服务。我检查了日志并发现了以下错误:< / p>

  

org.springframework.beans.factory.BeanCreationException:使用name创建bean时出错   &#39; dialectDetector&#39;:init方法的调用失败;嵌套异常是   org.springframework.jdbc.support.MetaDataAccessException:提取时出错   DatabaseMetaData的;嵌套异常是org.h2.jdbc.JdbcSQLException:唯一索引或主要索引   密钥违规:&#34; PRIMARY KEY ON&#34;&#34;&#34;&#34; .PAGE_INDEX&#34 ;; SQL语句:   ALTER TABLE PUBLIC.SHIRO_USER_ROLES添加约束PUBLIC.FKBA2210573552FAD9 FOREIGN   KEY(SHIRO_USER_ID)参考PUBLIC.SHIRO_USER(ID)NOCHECK [23505-176]     at java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:471)     at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:334)     at java.util.concurrent.FutureTask.run(FutureTask.java:166)     在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)     at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)     在java.lang.Thread.run(Thread.java:701)   引起:org.springframework.jdbc.support.MetaDataAccessException:提取时出错   DatabaseMetaData的;嵌套异常是org.h2.jdbc.JdbcSQLException:唯一索引或主要索引   密钥违规:&#34; PRIMARY KEY ON&#34;&#34;&#34;&#34; .PAGE_INDEX&#34 ;; SQL语句:   ALTER TABLE PUBLIC.SHIRO_USER_ROLES添加约束PUBLIC.FKBA2210573552FAD9 FOREIGN
  KEY(SHIRO_USER_ID)参考PUBLIC.SHIRO_USER(ID)NOCHECK [23505-176]     ......还有6个   引起:org.h2.jdbc.JdbcSQLException:唯一索引或主键违规:&#34; PRIMARY&gt; KEY ON&#34;&#34;&#34;&#34; .PAGE_INDEX&#34 ;; SQL语句:   ALTER TABLE PUBLIC.SHIRO_USER_ROLES添加约束PUBLIC.FKBA2210573552FAD9 FOREIGN   KEY(SHIRO_USER_ID)参考PUBLIC.SHIRO_USER(ID)NOCHECK [23505-176]

看起来H2驱动程序版本已在grails 2.4中更新,并且与先前版本的数据库方案不兼容。那么我能做些什么呢?如何将我的数据库迁移到新H2,以便正常工作?

2 个答案:

答案 0 :(得分:0)

您可能需要使用this升级数据库。将此Jar添加到您的类路径中。

答案 1 :(得分:-1)

这绝对是一个H2问题。看看这个H2线程,Thomas Mueller发现了这个问题。

现在我需要弄清楚如何从Grails全局排除H2版本176并使用175,因为176之后的任何内容都是beta!