了解Spring的@Transactional隔离级别" Serializable"

时间:2018-03-19 13:48:23

标签: java spring transactional isolation-level

我想使用Spring的@Transactional注释来防止更新数据库记录时的并发性。隔离级别" Serializable"声称这样做,但我想了解这是否确实涵盖了我的使用案例以及这种隔离级别的完整后果。我没有使用JPA,我们已经使用乐观锁定(版本/时间戳列)进行长时间对话。

  • 如果我的查询是简单的Update table X where id = 123,那么只会在交易正在进行时记录123被锁定,还是整个表X?
  • 如果是,那么我正在考虑让我的所有更新,插入和删除都具有此隔离级别。我从未发现允许同一记录上的并发操作发生而不会引起问题的任何意义。这是否合情合理?

最后我们有一个更复杂的插入查询,其中id字段的自动增量不适合我们(不要问)。

@Transactional(Isolation = ????)
public String insertUser(User user){
    Integer nextid = query(select id from table ids where tablename = user);
    query(insert in tabel user using nextId);
    query(update table ids set id = (nextId+1) where tablename = user);
}

我想禁止访问获取表="用户"的ID的记录。直到此交易完成。哪个隔离级别涵盖了这个?

0 个答案:

没有答案