La anotación de bloqueo optimista no funciona.
@OptimisticLocking(type = OptimisticLockType.NONE) public class TestEntity { .... } y la anotación @Lock tampoco funciona:
public interface TestRepository<TestEntity, Long> extends JpaRepository<Version, Long> { @Lock(LockModeType.NONE) TestEntity findByName(String name); }Entonces, trato de llamar:
entityManager.refresh();Funciona, pero es una solución.
EntityManager em = sharedEntityManagerBean.getObject(); em.refresh(testEntity, LockModeType.OPTIMISTIC); testRepository.save(testEntity);¿Podría decirme por qué la anotación de bloqueo optimista no funciona y cuál es la mejor manera de actualizar la fila DB (entidad) con los datos más recientes?
OptimisticLockType.NONE deshabilita el mecanismo de bloqueo optimista predeterminado para TestEntity .
Sin embargo, eso solo sería útil si heredó la propiedad @Version de una clase base que está anotada con @MappedSuperclass o @Inheritance .
En su caso, podría simplemente eliminar la propiedad @Version si no desea un bloqueo optimista para esta entidad. Sin embargo, suele ser una mala idea, ya que podría provocar la pérdida de actualizaciones .
Tal vez desee utilizar el bloqueo optimista sin versión que puede reducir la tasa de conflictos generados por cambios de propiedad que no se superponen.
De nuevo, @Lock(LockModeType.NONE) es inútil ya que está implícito de forma predeterminada. Puedes eliminar eso también. Eso solo está destinado a adquirir un bloqueo lógico o físico explícito .
Está sacando conclusiones equivocadas al pensar que el bloqueo optimista está causando un problema que ni siquiera describió.
Por lo tanto, debe formular la pregunta de manera adecuada para que quede clara: