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的事务隔离你们一般管不管?怎么管啊?不觉得所有方法都写事务浪费??呵呵,希望大家多讨论讨论,主要是学习!