Здравствуйте, у меня такая странная ситуация.
Я сохраняю в базу 5000 записей.
Так вот когда я сохраняю по одной записи в транзакцию, то всё в порядке, успешно сохраняются все 5000 записей, правда очень медленно,
но вот когда я сохраняю по 50 за одну транзакцию то вылетает ошибка следующего содержания.
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:249)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:92)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:87)
at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:218)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2220)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2656)
at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:52)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:232)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:139)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at de.hacon.contoller.Controller.saveDW(Controller.java:490)
at de.hacon.contoller.Controller.start(Controller.java:204)
at de.hacon.gui.MainPanel$3$1.run(MainPanel.java:132)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.sql.BatchUpdateException: Duplicate entry 'null-Ekerö, Ekvägen 10b-cluster' for key 1
at com.mysql.jdbc.ServerPreparedStatement.executeBatch(ServerPreparedStatement.java:665)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:242)
... 18 more
Вопрос, почему по одной записи сохранение происходит нормально, а по 50 с ошибкой?
От чего это может зависеть?
Здравствуйте, unkis, Вы писали:
U>Здравствуйте, у меня такая странная ситуация.
U>Я сохраняю в базу 5000 записей.
U>Так вот когда я сохраняю по одной записи в транзакцию, то всё в порядке, успешно сохраняются все 5000 записей, правда очень медленно,
U>но вот когда я сохраняю по 50 за одну транзакцию то вылетает ошибка следующего содержания.
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
Caused by: java.sql.BatchUpdateException: Duplicate entry 'null-Ekerö, Ekvägen 10b-cluster' for key 1
at com.mysql.jdbc.ServerPreparedStatement.executeBatch(ServerPreparedStatement.java:665)
U>Вопрос, почему по одной записи сохранение происходит нормально, а по 50 с ошибкой?
U>От чего это может зависеть?
А ключи каким образом генерируются?
Да и странно то, что 5000 записей сохраняются очень медленно... Очень — это сколько?