Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Hibernate, как такое объснить? 
:(
    Опции темы
unkis
  Дата 16.6.2007, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 802
Регистрация: 8.9.2004

Репутация: нет
Всего: 1



Здравствуйте, у меня такая странная ситуация.

Я сохраняю в базу 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 с ошибкой?
От чего это может зависеть?





--------------------
www.unkis.com
PM MAIL WWW   Вверх
w1nd
Дата 17.6.2007, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 7
Всего: 54



Вы создаёте объекты? Если да, поменяйте генератор ключей.
Какой способ гереации ключей используете?


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
kkorsakoff
Дата 17.6.2007, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.10.2005
Где: Санкт-Петербург

Репутация: 6
Всего: 14



А это разве не из-за того, что JDBC драйвер не поддерживает batch update?

Может надо поставить в cfg.xml вот так?

Код

<property name="jdbc.batch_size">0</property

PM MAIL WWW ICQ   Вверх
ekr
Дата 17.6.2007, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


...и это пройдет...
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 6.5.2007
Где: Moscow, RU

Репутация: 12
Всего: 19



Цитата(w1nd @  17.6.2007,  00:43 Найти цитируемый пост)
Вы создаёте объекты? Если да, поменяйте генератор ключей.

Мне тоже так кажется, ведь:
Цитата(unkis @  16.6.2007,  19:21 Найти цитируемый пост)
Caused by: java.sql.BatchUpdateException: Duplicate entry 'null-Ekerö, Ekvägen 10b-cluster' for key 1


unkis, может, имеет смысл показать кусочек кода сохранения/генерации ключей?


--------------------
и это пройдет....

http://ekrs.blogspot.com
PM WWW   Вверх
w1nd
Дата 17.6.2007, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 7
Всего: 54



Цитата(kkorsakoff @  17.6.2007,  13:45 Найти цитируемый пост)
А это разве не из-за того, что JDBC драйвер не поддерживает batch update?

Нет. Скорее всего нету автоинкремента для ключей в таблице и генератор используется вроде +1 или MAX.

Это сообщение отредактировал(а) w1nd - 17.6.2007, 15:28


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
unkis
  Дата 17.6.2007, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 802
Регистрация: 8.9.2004

Репутация: нет
Всего: 1



Цитата(w1nd @  16.6.2007,  22:43 Найти цитируемый пост)
Вы создаёте объекты? Если да, поменяйте генератор ключей.


Поменял помогло, но всё равно не понятно, значит если по одной записи за транзакцию сохранять, то с ключами всё в порядке, а вот если пачками за транзакцию, то ему не нравится, ведь и в первом и во втором случаи ключи одинаковые.
Странно всё это как-то



--------------------
www.unkis.com
PM MAIL WWW   Вверх
ekr
Дата 17.6.2007, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


...и это пройдет...
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 6.5.2007
Где: Moscow, RU

Репутация: 12
Всего: 19



Цитата(unkis @  17.6.2007,  15:34 Найти цитируемый пост)
Странно всё это как-то

да нет, нормальная ситуация. просто при вставке нескольких записей, пока не подтверждена транзакция , считается, что их еще нет (если уровень изоляции транзакций нормальный выставлен). поэтому многие алгоритмы генерации ключей могут здесь обламываться, если они вида "вставить запись - посмотреть мак. значение ключевого поля - инкрементировать его".


--------------------
и это пройдет....

http://ekrs.blogspot.com
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0509 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.