我有以下存储库:
public interface PlayerRealBalanceRepository extends JpaRepository<PlayerRealBalance, Long> {
@Modifying
@Query("update PlayerRealBalance balance set balance.balance = (balance.balance + ?1) where balance.id = ?2")
public void increaseBalance(long amount, long balanceId);
}
我的问题 - 这个查询线程安全吗?如果完全同时执行 2 个这样的并发查询怎么办?我必须使用锁定方法才能正常工作吗?
谢谢!
最佳答案
会遇到ACID(Atomicity, Consistency, Isolation, Durability)问题。因此更好用事务请引用spring事务管理here供您引用的是日志(不言自明)如果您实现事务管理(尽管我使用 Mybatis)会发生什么
2014-02-11 16:48:21,008 [main] DEBUG o.s.j.d.DataSourceTransactionManager - Switching JDBC Connection [jdbc:oracle:thin] to manual commit
2014-02-11 16:48:21,013 [main] DEBUG org.mybatis.spring.SqlSessionUtils - Creating a new SqlSession
2014-02-11 16:48:21,021 [main] DEBUG org.mybatis.spring.SqlSessionUtils - Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16a23cf]
2014-02-11 16:48:21,091 [main] DEBUG o.m.s.t.SpringManagedTransaction - JDBC Connection [jdbc:oracle:thin:] will be managed by Spring
// does the db operation
2014-02-11 16:48:21,792 [main] DEBUG org.mybatis.spring.SqlSessionUtils - Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16a23cf]
2014-02-11 16:48:21,792 [main] DEBUG o.s.j.d.DataSourceTransactionManager - Initiating transaction commit
2014-02-11 16:48:21,792 [main] DEBUG o.s.j.d.DataSourceTransactionManager - Committing JDBC transaction on Connection [jdbc:oracle:thin:]
2014-02-11 16:48:21,792 [main] DEBUG org.mybatis.spring.SqlSessionUtils - Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16a23cf]
2014-02-11 16:48:21,792 [main] DEBUG org.mybatis.spring.SqlSessionUtils - Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16a23cf]
2014-02-11 16:48:21,792 [main] DEBUG o.s.jdbc.datasource.DataSourceUtils - Resetting isolation level of JDBC Connection [jdbc:oracle:thin:] to 2
2014-02-11 16:48:21,792 [main] DEBUG o.s.j.d.DataSourceTransactionManager - Releasing JDBC Connection [jdbc:oracle:thin:@] after transaction
2014-02-11 16:48:21,792 [main] DEBUG o.s.jdbc.datasource.DataSourceUtils - Returning JDBC Connection to DataSource
关于java - Spring data - 修改查询并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21707550/