Hibernate, как такое объснить?
От: unkis  
Дата: 16.06.07 16:27
Оценка:
Здравствуйте, у меня такая странная ситуация.

Я сохраняю в базу 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 с ошибкой?
От чего это может зависеть?
Re: Hibernate, как такое объснить?
От: RomikT Германия  
Дата: 16.06.07 16:35
Оценка:
Здравствуйте, 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 записей сохраняются очень медленно... Очень — это сколько?
Re[2]: Hibernate, как такое объснить?
От: unkis  
Дата: 16.06.07 16:43
Оценка:
RT>А ключи каким образом генерируются?
Я вижу что он пишет что ключ одинаковый, но почему тогда он по одной записи в транзакцию сохраняет и не выдаёт никакой ошибки?
Ведь в одном и в другом случаи ключи одинаковые.

RT>Да и странно то, что 5000 записей сохраняются очень медленно... Очень — это сколько?

ну там не только сохранение там ешё и выборки и апдейты.
время сохранения около 3 минут.


Ещё метил что по 13 за транзакцию он сохраняет без проблем, а вот уже по 14 выдаёт туже ошибку.
Re[3]: Hibernate, как такое объснить?
От: lexius www.acula.org
Дата: 16.06.07 19:54
Оценка:
Здравствуйте, unkis, Вы писали:


RT>>А ключи каким образом генерируются?

U>Я вижу что он пишет что ключ одинаковый, но почему тогда он по одной записи в транзакцию сохраняет и не выдаёт никакой ошибки?
U>Ведь в одном и в другом случаи ключи одинаковые.

RT>>Да и странно то, что 5000 записей сохраняются очень медленно... Очень — это сколько?

U>ну там не только сохранение там ешё и выборки и апдейты.
U>время сохранения около 3 минут.


U>Ещё метил что по 13 за транзакцию он сохраняет без проблем, а вот уже по 14 выдаёт туже ошибку.


Нужно на код взглянуть, причин может быть множество.
************
www.acula.org
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.