乐观锁定注释不起作用。
@OptimisticLocking(type = OptimisticLockType.NONE)
public class TestEntity {
....
}
和@Lock
注释也不起作用:
public interface TestRepository<TestEntity, Long> extends JpaRepository<Version, Long> {
@Lock(LockModeType.NONE)
TestEntity findByName(String name);
}
所以,我试着打电话:
entityManager.refresh();
它有效,但它是一种解决方法。
EntityManager em = sharedEntityManagerBean.getObject();
em.refresh(testEntity, LockModeType.OPTIMISTIC);
testRepository.save(testEntity);
你能告诉我为什么乐观的锁注释不起作用以及用最新数据更新DB行(实体)的最佳方法是什么?
答案 0 :(得分:2)
OptimisticLockType.NONE
禁用TestEntity
的默认乐观锁定机制。
但是,仅当您从使用@Version
或@MappedSuperclass
注释的基类继承@Inheritance
属性时,这才有用。
在您的情况下,如果您不希望对此实体进行乐观锁定,则只需删除@Version
属性即可。但是,这通常是一个坏主意,因为它可能导致lost updates。
也许你想使用versionless optimistic locking来降低非重叠属性通道产生的冲突率。
同样,@Lock(LockModeType.NONE)
是无用的,因为默认情况下它是隐含的。你也可以删除它。这只适用于acquiring an explicit logical or physical lock。
你得出了错误的结论,认为乐观锁定导致了一个你甚至无法描述的问题。
因此,您需要以适当的方式提出问题,以便明确: