再谈spring的事务2(集成hibernate)–用oracle的v$transaction看事务的加锁情况

来源:互联网 发布:网红淘宝店前十名2017 编辑:程序博客网 时间:2024/06/06 02:39

情况见上篇:

一个service调用俩个不同dao操作两个表:

显示:

Hibernate: update departments (可在此设置断点,去看V$transaction)set name=? where id=?
departmentDao session  hashcode 20059345
departmentDao get tran7296394
departmentDao get tranfalse


saveUser session  hashcode 7077235
saveUser’s get tran15046345
saveUser’s get tranfalse
Hibernate: update users set age=?, first_name=?, last_name=?, birth_day=?, account=? where id=?

 


问题:虽然trans hashcode显示为两个不同值,但实际只有一个事务开启(按道理是两个,因为后者为required_new),

为什么?


看事务的语句:

Select *  From V$transaction;

0000000064EB6D78    4    34    1574    2    1518
select * from v$lock;

select All_Objects.Object_Name, rpad(oracle_username,10) o_name,session_id sid,
decode(locked_mode,0,’None’,1,’Null’,2,’Row share’,
3,’Row Exclusive’,4,’Share’,5,’Share Row Exclusive’,6,’Exclusive’) lock_type,
object_name ,xidusn,xidslot,xidsqn
From V$locked_Object,All_Objects
where v$locked_object.object_id=all_objects.object_id;

Object_Name   SID     LOCK_TYPE

CONE3590_D    151    Row Exclusive    DEPARTMENTS    4    34    DEPARTMENTS    1574

 

select sid,type,trunc(id1/65536),mod(id1,65536),id2,
decode(lmode,0,’None’,1,’Null’,2,’Row share’,
3,’Row Exclusive’,4,’Share’,5,’Share Row Exclusive’,6,’Exclusive’)
lock_type,request,ctime,block
From V$lock
where TYPE IN(‘TX’,'TM’);

sid     TYPE                        ROCK TYPE

151    TM    0    61989    0    Row Exclusive    0    141    0
151    TX    4     34    1574     Exclusive            0    141        0