Прошло некоторое время с тех пор, как я разместил этот вопрос, но я понял это. Я объясню, что я сделал, чтобы это могло быть полезно кому-то другому.
Аннотация @Version
- это интерфейс javax.persistence, а не структура jpa-данных остатка данных, как я упоминал ранее.
Если вы хотите использовать @version вам нужно создать поле версии в вашем объекте домена, как так:
@Version
@Column(name = "VERSION")
private long version;
Если вы используете спящий режим он автоматически пикап аннотацию, и он будет создавать строка «версия» в вашей (в моем случае MySql) таблице. Каждый раз, когда запись обновляется, спящий режим увеличивает счетчик с помощью 1.
Теперь, почему это то, что вы хотите? Ну, причина, почему вы можете использовать это, заключается в том, что это снижает вероятность того, что ваши клиенты работают с stale data. Всякий раз, когда клиент получает информацию от вас, версия предоставляется с запрошенными им данными. например
{ <-- School entity -->
"id": 1,
"version": 0,
"name": "De regenboog",
"street": "Plantaanstraat",
"number": "2",
"zipCode": "1234AS",
"city": "Amsterdam"
}
Теперь, если клиент хочет изменить некоторую информацию об этой конкретной записи, он отправляет новую информацию вместе с значением версии. В этом случае давайте изменим название школы.
{ <-- School entity -->
"id": 1,
"version": 0,
"name": "Stackoverflow",
"street": "Plantaanstraat",
"number": "2",
"zipCode": "1234AS",
"city": "Amsterdam"
}
Hibernate предлагает запрос с вашей информацией и добавляет дополнительное предложение «где», чтобы проверить версию. update .... where id = 1 and version = 0
. Теперь, если строка обновлена, это означает, что вы предоставили правильную версию, и никто другой не изменил эту конкретную информацию за время, когда вы запросили информацию, изменили ее и отправили обратно. Хорошо?
Теперь, если строка не обновляется? Это означает, что кто-то еще обновил эту строку во время быстрой перерыва в ванной комнате после того, как вы запросили информацию. Это означает, что ваша версия устарела! То, что должно произойти сейчас, действительно применимо для конкретного случая, поэтому я не буду вдаваться в подробности об этом :)
Надеюсь, кто-то может использовать эту информацию!
Спасибо всем
Это действительно имеет смысл. Это определенно помогло мне. Спасибо – kalz