0

Grails アプリケーションを作成し、それを Tomcat サーバーにデプロイしました。外部の MySQL データベースを使用するように Grails アプリケーションを構成しました。Tomcat サーバーを起動してアプリケーションをデプロイした後 (そしてデータベース スキーマが作成された後)、リレーショナル データを既存のデータベース内の複数のテーブルから Grails アプリケーションによって生成された新しいデータベースに転送するスクリプトを実行します。

スクリプトは問題なく実行され、INSERT 中にデータベース エラーは発生しません。

挿入後、Grails アプリケーションを使用して既存のデータをすべて問題なく表示できます。

ただし、Tomcat サーバーを停止してから再起動すると問題が発生します。catalina.out で次のエラーに直面しています。

2013-01-15 00:43:37,820 [pool-2-thread-1] ERROR util.JDBCExceptionReporter  - Duplicate entry '1-2' for key 'PRIMARY'
2013-01-15 00:43:37,826 [pool-2-thread-1] ERROR events.PatchedDefaultFlushEventListener  - Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
        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)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
        at java.lang.Thread.run(Thread.java:679)
Caused by: java.sql.BatchUpdateException: Duplicate entry '1-2' for key 'PRIMARY'
        at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:2024)
        at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1449)
        at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)
        at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)
        ... 6 more
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '1-2' for key 'PRIMARY'
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
        at com.mysql.jdbc.Util.getInstance(Util.java:386)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1039)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3597)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3529)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1990)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2151)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2625)
        at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2119)
        at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2415)
        at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1976)
        ... 9 more

重複データが存在する場合、そもそもどのようにして情報が正常に挿入されたのでしょうか?

ありがとう!

4

1 に答える 1

0

BootStrap.groovyファイルをチェックし、存在するデータベースに何も挿入していないことを確認します

例:def adminRole = Role.findByAuthority( "ROLE_ADMIN")?:new Role(authority: "ROLE_ADMIN")。save(failOnError:true)

于 2013-01-22T14:45:30.457 に答える