Я использую весенний mvc 3.0 и спящий режим. Я здесь, как, у меня есть инвентарь, где пользователь может добавлять и удалять элементы. Например, общее количество = 50. Теперь два пользователя одновременно хотят обновить инвентарь, например, 2 элемента, удаленные A и 4 элемента, удаленные B. Таким образом, общее количество = 44. Теперь, как я могу выполнить эту транзакцию, когда оба пользователя пытаются одновременно обновить инвентарь ?? Если транзакция не поддерживается, она будет равна 50-2 = 48, а затем 50-4 = 46.сделка весна mvc и hiberante
ответ
Используйте version property для обеспечения правильной семантики. Это тема всего раздела справочного руководства Hibernate: "Optimistic concurrency control"
Вы можете использовать оптимистичную блокировку с управлением версиями. Оптимистическая блокировка с версией включена, как только вы добавляете или свойство к постоянному сопоставлению классов. отображение свойства в XML должно быть размещено сразу после отображения идентификатора недвижимости:
<class name="Item" table="ITEM">
<id .../>
<version name="version" access="field" column="OBJ_VERSION"/>
...
</class>
с этим, когда элемент обновляются, то SQL будет:
update ITEM set INITIAL_PRICE='12.99', OBJ_VERSION=2
where ITEM_ID=123 and OBJ_VERSION=1
Если другая одновременно единица работы обновляется и зафиксировал ту же строку, столбец OBJ_VERSION больше не содержит значение 1, а строка не обновляется. Hibernate проверяет количество строк для этого оператора, возвращаемое драйвером JDBC , который в этом случае представляет собой количество обновленных строк, ноль и генерирует StaleObjectStateException.
Если у вас нет версии или временных меток столбцов, Hibernate все еще может выполнять автоматическую управления версиями, но только для объектов, которые извлекаются и модифицированными в том же контексте инерционности (то есть, та же сессия). Эта альтернативная версия управления версиями проверяет текущую базу данных на соответствие неизмененным значениям постоянных свойств во время восстановления объекта (или в последний раз, когда контекст сохранения был сброшен). Вы можете включить эту функцию, установив атрибут оптимистических блокировок на отображении класса :
<class name="Item" table="ITEM" optimistic-lock="all">
<id .../>
...
</class>
Следующая SQL теперь выполняется промывать модификацию экземпляра товара: обновления Комплект ITEM_PRICE = '12 .99' где ITEM_ID = 123 и ITEM_PRICE = «9,99» и ITEM_DESCRIPTION = «Элемент,» и ... и SELLER_ID = 45
в обоих случаях, это до вас, чтобы перезапустить вторую транзакцию или слить обновлять, когда вы получаете исключение StaleObjectStateException. Этот случай должен быть очень редким, в противном случае вам нужно реорганизовать, чтобы уменьшить область транзакций, чтобы сделать ее меньшей и быстрой.
Более подробную информацию вы можете найти в книге «Java Persistent with Hibernate» от CHRISTIAN BAUER и GAVIN KING. (Рекомендуется)
EDIT: Ryan is right. Я исправляю свой ответ.
- 1. Весна Сделка - Прокси путаница
- 2. Глобальная сделка весна
- 3. весна сделка JdbcTemplate/HibernateTemplate и HibernateDaoSupport/JdbcDaoSupport
- 4. Весна и интеграции Hiberante. Как сохранить объект команды?
- 5. весна дисплей сделка с log4j
- 6. Весна безопасности и mvc
- 7. Весна mvc и Ajax
- 8. Магистраль и весна mvc
- 9. весна-спящая сделка-изменение не отражает?
- 10. Весна mvc jdbc и hibernate
- 11. «TransactionRequiredException: сделка не находится в процессе», даже если сделка перехватчик применяется - зимуют-5 и весна-4,3
- 12. Весна mvc и весна версия для безопасности конфликта
- 13. Весна MVC/Весна Данные данных выборка рекурсии
- 14. Весна + Весна MVC инъекции без использования @Autowire
- 15. Весна MVC Hibernate Весна Безопасность Вход
- 16. Весна MVC. Рендеринг макета
- 17. Угловая 2 + Весна MVC
- 18. Весна MVC две конфигурации?
- 19. Весна MVC или калитка?
- 20. Плитки - Весна MVC
- 21. весна веб Scala MVC
- 22. Весна mvc против шва
- 23. Весна mvc сервлет инициализации
- 24. Весна mvc обновление операции
- 25. MVC весна исключение
- 26. Весна mvc + hibernate + maven
- 27. Весна 4 MVC + HTTPS
- 28. Java весна 3,0 MVC
- 29. Весна mvc charset
- 30. выпадающей весна веб MVC
Это неверно. Hibernate по умолчанию оптимизирует блокировку, поэтому он не будет «просто работать». –
@ Райан Стюарт, что вы подразумеваете под оптимистичной блокировкой ?? может у объяснить немного ?? – curiouss
Я ищу оптимистичную блокировку и обнаружил, что: Оптимистичный подход всегда предполагает, что все будет в порядке и что конфликтующие изменения редки. Оптимистичный контроль параллелизма вызывает ошибку только в конце единицы работы, когда данные записываются. Многопользовательские приложения обычно по умолчанию используют оптимистичный контроль параллелизма и подключения к базе данных с уровнем изоляции с фиксацией чтения. Дополнительные гарантии изоляции получаются только в случае необходимости; например, когда требуется повторное считывание. Этот подход обеспечивает наилучшую производительность и масштабируемость. – Jacky