Использование @Version в проекте spring -data

Я работаю над веб-сервисом RESTful с spring -data. Несколько дней назад была выпущена специальная spring -data jpa REST framework .

Теперь я заметил возможность использовать @Version с этой структурой. Создана ли эта версия сама по себе или вам нужно сделать это вручную?

И можно ли использовать @Version на свой собственный? (Так что мне не нужно ничего менять в мои существующие репозитории/домен и т.д.)

И мне нужно сделать некоторую дополнительную конфигурацию, чтобы использовать @Version?

Ответ 1

Прошло некоторое время с тех пор, как я опубликовал этот вопрос, но я понял это. Я объясню, что я сделал, чтобы это могло быть полезно кому-то другому.

Аннотация @Version - это интерфейс javax.persistence, а не spring -data rest jpa framework, как я упоминал ранее.

Если вы хотите использовать @Version, вам нужно создать поле версии в своем доменном объекте так:

@Version
@Column(name = "VERSION")
private long version;

Если вы используете спящий режим, он автоматически подпишет аннотацию и создаст строку "версия" в вашей (в моем случае MySql) таблице. Каждый раз, когда запись обновляется, спящий режим увеличивает счетчик с помощью 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": "Stackoverflow",
    "street": "Plantaanstraat",
    "number": "2",
    "zipCode": "1234AS",
    "city": "Amsterdam"
 }

Hibernate предлагает запрос с вашей информацией и добавляет дополнительное предложение "where" для проверки версии. update .... where id = 1 and version = 0. Теперь, если строка обновлена, это означает, что вы предоставили правильную версию, и никто другой не изменил эту конкретную информацию за время, когда вы запросили информацию, изменили ее и отправили обратно. Ничего хорошего?

Теперь, если строка не обновляется? Это означает, что кто-то еще обновил эту строку во время быстрой перерыва в ванной комнате после того, как вы запросили информацию. Это означает, что ваша версия устарела! То, что должно произойти сейчас, действительно применимо к конкретному случаю, поэтому я не буду вдаваться в подробности об этом:)

Надеюсь, кто-то сможет использовать эту информацию!

Спасибо всем

Ответ 2

Обязательно импортируйте import javax.persistence.Version

а не spring.