Использование @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

и не весенний.

Другие вопросы по тегам