Hibernate和EJB和直接写JDBC三种处理事务的讨论及其隔离级别的讨论

我用过JDBC直接写系统,也用过了EJB,现在在看Hibernate的书籍。
对事务的处理一直有一些困惑,你们看:

当初我直接用JSP+JAVABEAN的时候,除非要在同一个方法(也就是一个原子操作里面)同时操作两次以上的数据库写的动作的时候才写事务处理,也就是:
CONNECTION.SETAUTOCOMMIT(FALSE);
……EXECUTE……
STATEMENT.COMMIT();
CONNECTION.SETAUTOCOMMIT(TRUE);
其他比如读,一个插入或者修改语句我都不写事务,我那时就有一个疑问,这些操作是不是也要写事务啊?
我只知道当两个有事务的操作同时访问同一资源的时候,是要排队的,但是想不起来其他两种情况会怎么样,1是一个包含在事务里面,一个没有写事务,会不会也要排队呢,2是两个都没有写事务,但是两个都是原子操作,比如读一条记录和写同一条记录,他们相遇会不会排队呢?这个是关于JDBC的疑问,请大家说说你们的看法。

我后来用EJB,发现所有的数据库访问都必须包含在事务里面(REQUIRE),那么这个就有问题了,比如两个读同一字段的方法相遇,他们也要排队,这个显得就有点奢侈了,那么解决这个办法就有一个,设置隔离级别,这个问题我知道,但是包括我在内,我问过不少写EJB的人,他们都不去管这个隔离级别问题,直接使用数据库默认的那个,我就像在这个地方问问大家,你们处理这个问题吗??怎么处理的??有什么经验???大家讨论一下

最后就是Hibernate,我发现也是都必须包含在事务里面,那么一样的,你们处理隔离问题吗?有什么经验???

简单概括一下,首先请大家回答关于使用JDBC的那几个问题,读操作要写事务吗?原子读和写操作要写吗?什么样的情况下要排队?两个不写事务的方法或者一个写了一个没写的相遇以后会排队吗?请仔细回答
Hibernate和EJB的事务隔离你们一般管不管?怎么管啊?不觉得所有方法都写事务浪费??呵呵,希望大家多讨论讨论,主要是学习!

怎么没有人关心阿

真使得,这里人气不够啊

我也困惑

怎么说呢,你这个基本概念就是错的,
首先事务和排队没有直接关系
要搞清楚这个概念要理解锁和事务的关系,系统会根据
事务的isolation和事务所进行的操作来决定加什么样的锁(共享、派它或是没有),只有撞了锁才需要排队

我一直觉得把涉及到复杂的事务处理类的逻辑过程(e.g:银行转帐)封装到数据库的存储过程中才是王道啊

>操作要写事务吗?
当然不需要
>原子读和写操作要写吗?
也不需要,但是你如何保证原子是个很难得问题。

>什么样的情况下要排队?
锁住的情况下

>两个不写事务的方法或者一个写了一个没写的相遇以后会排队吗?
取决于DB的锁策略,在DB那里如果有锁当然排队。事务只是利用锁来确保一个过程的完整性。

>Hibernate和EJB的事务隔离你们一般管不管?怎么管啊?不觉得所有方法都写事务浪费

所有方法都写事务不浪费浪费,因为这是一个扁平事务,都是贯穿一个事务,不是一个嵌套一个,有什么浪费可言?