数据库很重要的方面就是事务和锁,我看过很多实例在dao层并没有显示的调用锁,是不是用了事务管理就已经为数据库操作创建了锁呢?一下一个自己写的例子,用的是spring和hibernate,spring中已经配置了事务管理
public void saveUser(final User use)throws HibernateException{
getHibernateTemplate().save(use);

}
spring 配置:<tx:method name="save*" propagation="REQUIRED" rollback-for="Exception" />
这样的代码会不会出现问题。

解决方案 »

  1.   

    <tx:method name="save*" propagation="REQUIRED" rollback-for="Exception" /> 这句代码操作的是事务,不是锁,save时如果抛出Exception则回滚。这样是不对的。save不需要回滚。即使回滚也应该是RuntimeException ...至于你说的锁,这个是在数据库端设置的。 另外Hibernate有相关的悲观所,乐观锁实现。
      

  2.   

    听说事务采用的就是锁机制,如果还要在数据库端加锁,应该怎么做,比如oracle.
      

  3.   

    你问的这个问题重点就是数据库的隔离级别,每个数据库默认的不同
    |---------------|----------------|----------------------|----------------|------------------------------------|
    |隔离级别       |  是否存在脏读  |  是否存在不可重复读  |  是否存在幻读  |越向下隔离级别越高,性能越差        |
    |---------------|----------------|----------------------|----------------|------------------------------------|
    |Read Uncommited|   Y  |   Y |   Y  |没提交时可读                        |
    |---------------|----------------|----------------------|----------------|------------------------------------|
    |Read Commited  |   N  |   Y(悲观锁后 N)      |   Y          |提交后可读(最常用)(加入悲观锁使用)  |
    |---------------|----------------|----------------------|----------------|------------------------------------|
    |Repeatable Read|   N  |   N |   Y  |可重复读(类似加入悲观锁) MySQL默认  |
    |---------------|----------------|----------------------|----------------|------------------------------------|
    |Serialiazble |   N  |   N |   N  |序列化读(基本不用)串行,没有并发性   |
    |---------------|----------------|----------------------|----------------|------------------------------------|
      

  4.   

    那是不是我们还要在数据库端自己弄个锁机制(或者说是事务隔离级别),我看了很多资料都没有提及这个问题,比如一个 select * from //语句,我现在想设置这个语句的隔离级别应该怎么做
      

  5.   

    所谓的锁(悲观锁,乐观锁)都是数据库的东西,spring在进行事物管理的时候就设定了默认锁啦,上网看看吧
      

  6.   

    spring在进行事物管理的时候就设定了默认锁,看了很多资料,在这方面没有介绍啊!能不能说详细一点或者发个资料的网址给我。
      

  7.   


    数据库事务,是为了保证数据一致性、完整性需要的。数据库的锁,一般跟你写程序没关系的,你只要考虑不会出现死锁就ok了!
    oracle的TM锁、TX锁知识完全普及
    http://blog.csdn.net/crazylaa/archive/2009/12/08/4966787.aspx