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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Hibernate, отловить Exсeption на дупликат ключа. 
:(
    Опции темы
unkis
Дата 24.4.2007, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ребята, такая проблема,  в базу кладу через hibernate некоторый данные, некоторые данные могут повторятся.

Вот и задача у меня класть в базу не повторяющиеся данные.

с начало я делал так, проверял перед каждой вкладкой есть ли уже в базе такие данные, и если да то не кладём, а если нет то сохраняем.

Но по мере того как база растёт делать выборку перед каждым сохранением это слишком дорого(по времени), и вот у меня появилось идея, тупа сохранять и отлавливать Exception на дубликат.

Вопрос в том как это реализуется в hibernate, или может есть другой способ?




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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 3
Всего: 8




а нельзя ли сделать индексирование (index) в базе данных на те ключи, где ты пытаешься сделать выборку?  smile 

Это сообщение отредактировал(а) polosatij - 24.4.2007, 20:22


--------------------
PM   Вверх
unkis
Дата 25.4.2007, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ну можно, но мне кажется при базе более 1 000 000 записей это всё равно будет не так быстро. 

А если критерий по которому я ищу, является Pymarykey, он же уже автоматически индексирован, или это не так?

по сути дела, у меня ошибка вылазит на duplicat key.



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


Опытный
**


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

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



Ребята теперь у меня проблема с самой Transaction

вот так я отлавливаю Exception, но всё равно когда дело доходит до tx2.comit();
Hibernate  делает Rollback и ничего в БД не сохраняет. 

Вопрос как быть?

Код

EntityManager entityManager = emf.createEntityManager();
        EntityTransaction tx2 = entityManager.getTransaction();
        
        for (RequestLocation requestLocation : requestLocationList) {
            tx2.begin();     
                try {
                    entityManager.persist(requestLocation.getLocation());
                    entityManager.persist(requestLocation);
                } catch (EntityExistsException e) {                
                    requestLocation.setLocation(entityManager.find(Location.class,requestLocation.getLocation().getLocation_id()));
                    entityManager.persist(requestLocation);
                    
                    
                }
            tx2.commit();    
        }        
        entityManager.close();



--------------------
www.unkis.com
PM MAIL 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.0645 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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