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