在Spring事务中更改隔离级别

时间:2013-12-19 23:13:37

标签: java spring oracle isolation-level

我在Spring事务中执行了很长的代码段。我现在只想用该代码的一小部分来执行不同的隔离级别。如果我打电话:

transactionTemplate.setIsolationLevel(Isolation.SERIALIZABLE.value());

在这个小子集之前,这将达到我的目标,还是我必须设置隔离级别,然后创建一个新的事务?

1 个答案:

答案 0 :(得分:2)

嗯,我知道在SQL * Plus中,设置隔离级别意味着启动事务:

-bash-4.1$ sqlplus mbobak/mbobak

SQL*Plus: Release 11.2.0.3.0 Production on Thu Dec 19 20:26:18 2013

Copyright (c) 1982, 2011, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

SQL> select taddr from v$session where sid in(select sid from v$mystat where rownum=1);

TADDR
----------------


SQL> set transaction isolation level serializable;

Transaction set.

SQL> select taddr from v$session where sid in(select sid from v$mystat where rownum=1);

TADDR
----------------
0000007F510EFD60

SQL> 

我认为这同样适用于您的Spring API。

想到别的东西。另外,请注意,事实上,'set transaction'必须是事务中的第一个语句。一旦开始,您就无法更改事务的隔离级别。任何这样做的尝试都将导致:

ORA-01453: SET TRANSACTION must be first statement of transaction