spring@transactional serializable无法按预期工作

xdyibdwo  于 2021-07-23  发布在  Java
关注(0)|答案(0)|浏览(268)

我用 Spring Data JPAHibernate ORM .
有一个共同的实体:

@Entity
@Table(name = "some_entity_table")
public class SomeEntity {

   private @Id UUID uuid;
   private String userId;

   //getters and setters and constructors
}

共同服务:

@Service
@RequiredArgsConstructor
public class EntityService {

  private final EntityRepository entityRepository;

  @Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED)
  public void get(String userId) {
    1. entityRepository.findAllByUserId(userId);
    2. SomeEntity someEntity = new SomeEntity(UUID.randomUUID(), userId);
    3. entityRepository.save(someEntity);
    4. List<SomeEntity> allByUserId = entityRepository.findAllByUserId(userId);
  }
}

我在2行中设置断点。然后我去我的数据库,用同样的方法手动插入行 userId 与不同的 uuid . 我希望hibernate在提交实体的insert之前执行 select by userId 再来一次,如果行数发生了变化(比如我的情况),就会抛出异常。但hibernate只执行insert。
我做错了什么?
附笔 repeatable read 隔离工作和我预期的一样(获取实体、代码中的更改、数据库中的手动更改、在代码中保存实体=>抛出异常)。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题