14

Я работаю над веб-сервисом RESTful с данными весны. Несколько дней назад был создан специальный весовой механизм jpa REST was released.Использование @Version в проекте весенних данных

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

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

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

ответ

34

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

Аннотация @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. Теперь, если строка обновлена, это означает, что вы предоставили правильную версию, и никто другой не изменил эту конкретную информацию за время, когда вы запросили информацию, изменили ее и отправили обратно. Хорошо?

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

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

Спасибо всем

+0

Это действительно имеет смысл. Это определенно помогло мне. Спасибо – kalz

1

Убедитесь в том, чтобы импортировать импортировать javax.persistence.Version

, а не весенняя.

+0

Я уже добавил, что к моему ответу: «Аннотация @Version - это интерфейс javax.persistence, а не структура jpa-данных rest-data, как я упоминал ранее». –

+1

Важно отметить причину.Spring @Version аннотация для всего, кроме JPA. См. Http://stackoverflow.com/a/31883006/328808. –

Смежные вопросы