作者回复: B可以是NESTED也可以是REQUIRES_NEW,要看你需要什么样的行为。那B正常的,但A回滚了,这时B要回滚么?如果要回滚就是前者,不然后者
作者回复: 没有@Transactional注解,就是没加事务,大部分情况下就是各条SQL单独的事务,比如一条upate语句。假设你用JdbcTemplate来做操作,就会从DataSource里获取连接。有事务的时候,就会用当前事务的连接来做操作。
作者回复: 事务是在连接上的,一个事务开启后的多条SQL都是执行在这个连接上的,不会更换连接。
作者回复: 这个是根据底层的JPA实现来的,Hibernate不支持NESTED。HibernateTransactionManager这个类的注释里有提到过
作者回复: 你都说隔离级别设置为3是,事务隔离级别没有3啊。
ISOLATION_DEFAULT = -1;
ISOLATION_READ_UNCOMMITTED = 1;
ISOLATION_READ_COMMITTED = 2;
ISOLATION_REPEATABLE_READ = 4;
ISOLATION_SERIALIZABLE = 8;
作者回复: 有几位同学都问到了,我答疑时统一解答吧
作者回复: 如果用的是REQUIRES_NEW,funcA的事务和funcB的事务应该是独立的,funcB提交了,funcA回滚是不影响funcB的。
作者回复: 是一样的
作者回复: 抱歉,只是一个个列一下,放一行有点长,没有特殊含义。如果一定要说当时为什么我是这么换行的,上面3个都是可以用来操作数据库的,实实在在的类库或者框架,下面2个属于其他。
作者回复: 其实不用JDBC操作,如果你在线下环境里,用某些客户端连上数据库,select for update锁住某条记录,你的程序在尝试锁定同一条记录时都会卡住或者报错。