Может ли кто-нибудь помочь мне в случае использования, когда использовать @Version
и @Audited
в Hibernate?
Когда использовать @Version и @Audited в Hibernate?
Ответ 1
@Version используется для реализации Оптимистической блокировки с Hibernate, что означает, что никакие две транзакции не переопределяют данные одновременно с конфликтом.
Если данные читаются двумя потоками одновременно, и оба пытаются обновить одну и ту же строку разными значениями,
Hibernate использует поле @Version
, чтобы проверить, обновлена ли строка.
Перед фиксацией каждая транзакция проверяет, что никакая другая транзакция не изменила свои данные.
При изменении последней транзакции возникает ошибка "Работа с устаревшими данными".
@Audited
используется для выполнения функции аудита на объектах Hiberate Envers
Ответ 2
@Version
- используется для реализации оптимистической блокировки, см. 2.2.1.2. Управление версиями для оптимистической блокировки. Оптимистическая блокировка полезна, когда вы не ожидаете много одновременных записей и не хотите платить за блокировку базы данных.
@Audited
- поставляется из Envers API и может использоваться для автоматического отслеживания изменений в сущностях в отдельной таблице аудита. Используйте Envers, чтобы сохранить историю изменений некоторых ваших сущностей.