JPA Оптимистическая блокировка не работает с @Version на @Id - PullRequest
0 голосов
/ 30 апреля 2019

Я работаю над приложением, в котором мне нужно реализовать оптимистическую блокировку с использованием JPA.Это приложение, которое уже разработано, и мне нужно настроить код для оптимизации подхода к блокировке.Что касается документации JPA онлайн, я читал, что использование тега @Version помогает с оптимистичной блокировкой.Однако это предполагает использование дополнительного столбца.Поэтому вместо этого я добавил версию в @Id, которая автоматически создается, как показано ниже:

@Version @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "data") private Long dataId;

Я использую extends JPARepository для реализации моих классов репозитория.Я также добавил тег @Lock, чтобы сделать оптимизацию сохранения в моем классе репозитория, как показано ниже,

@Lock(LockModeType.OPTIMISTIC) @Override <S extends Data> S save(S entity);

Я написал несколько тестовых случаев, используя TransactionTemplate для выполнения различных транзакций, и когдаЯ выполнил тестовый пример и получил следующее исключение:

org.springframework.dao.CannotAcquireLockException: не удалось выполнить оператор;SQL [н / п];Вложенное исключение - org.hibernate.exception.LockTimeoutException: не удалось выполнить оператор в org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException (HibernateJpaDialect.java:250) в org.springframework.ormpa(HibernateJpaDialect.java:225) при org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible (AbstractEntityManagerFactoryBean.java:527) при org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible (ChainedPersistenceExceptionTranslator.java:61) при org.springframework.Дао185) на org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor $ CrudMethodMetadataPopulationMethodInterceptor.invoke (CrudMethodMetadataPostProcessor.java:135)

Может ли кто-нибудь помочь мне с помощью вставки данных, чтобы получить оптимистический запрос для получения инструкций или совета о том, что мне нужно, чтобы получить оптимистическую подсказку для получения инструкций или советов о том, для чего мне нужен оптимистический запрос, чтобы получить какие-либо рекомендации для получения совета или совета по поводу1017 *

...