库.Spring-数据-JPA,Java 8,JUnit-4 (用于测试)
我有一个实体,我们叫它Semaphore。有多台机器试图创建相同的Semaphore行。我们只想让其中一个成功。下面是发生的事情-
Semaphore行有一个主键,始终是1。save将其保存到DBexists,但这并不能保证任何东西,因为这两台机器都可以在创建记录之前进行检查。除了直接使用实体管理器来查看实体是否是新实体之外,我们还有什么选择?本质上覆盖Spring数据保存方法。
我们使用Oracle作为DB。
对于每个人的现成参考,这里是Spring的SimpleJpaRepository保存方法。
@Transactional
public <S extends T> S save(S entity) {
if(this.entityInformation.isNew(entity)) {
this.em.persist(entity);
return entity;
} else {
return this.em.merge(entity);
}
}发布于 2017-04-10 17:47:20
以下是我们为解决这个问题所做的工作。
save。Long version上的Long version标记进行乐观锁定。findById查找记录。如果找到一个,我们就去更新它。如果更新失败,我们知道这台机器失去了它的出价,所以它放弃了。persist先插入。如果坚持失败,我们知道这台机器失去了它的出价,所以它放弃了。@Transactional注释中。谢谢大家的帮助!
发布于 2017-04-07 00:00:35
您需要的是乐观锁定,您可以在@Version类中使用一个带有@Entity注释的版本字段来实现这一点。
例如。
@Version
private Long version;https://stackoverflow.com/questions/43265875
复制相似问题