我用 Spring Data JPA
与 Hibernate 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
隔离工作和我预期的一样(获取实体、代码中的更改、数据库中的手动更改、在代码中保存实体=>抛出异常)。
暂无答案!
目前还没有任何答案,快来回答吧!