| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Hibrenatе, паралельное сохранение |
| Автор: unkis 12.7.2012, 11:10 |
| У меня следующая проблема. Существует транзакция которая делает следующае Транзакция: 1) Посмотри, есть ли обект с определёнными параметрами в БД. 2) Если нет, то создай этот объект. В противном случае обнови обект. Предположим, мы имеем две транзакции (Т1 и Т2), которые выполняются параллельно. T1 смотрит в БД - нет никакого объекта. Миллисекунду позднее, T2 смотрит в БД - нет и объекта. T1 сохраняет объект в базу данных, и это также делает T2. У нас есть два объекта вместо одного. Как ршить эту проблему? Я использую: Hibernate + Tomcat + Spring Спасибо. |
| Автор: AntonSaburov 12.7.2012, 11:22 |
| Это вопрос к уровню изолированности транзакций - почитай http://ru.wikipedia.org/wiki/%D0%A3%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C_%D0%B8%D0%B7%D0%BE%D0%BB%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D1%82%D1%80%D0%B0%D0%BD%D0%B7%D0%B0%D0%BA%D1%86%D0%B8%D0%B9 Мы обчно решали этот вопрос с помощью версионности - например http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/transactions.html#transactions-optimistic |
| Автор: unkis 12.7.2012, 11:39 |
| На самом деле, проблему решил простым словом synchronyzed в вызове методо, помоему быстрое и оптимальное решение, что думаете? |
| Автор: AntonSaburov 12.7.2012, 15:44 |
| Я не совсем внимательно прочитал первое сообщение - чего-то в версионность полез. Может будет проще поставить уникальность на список нужных полей в базе данных - если такой объект существует, то при добавлении будет выдаваться exception. И всех делов. |