hibernate+spring 注解 对事务的一些信息

    技术2026-01-18  2

    原文地址:http://www.cnblogs.com/marcus/archive/2009/09/26/1574612.html

     

    事务注解说明 @Transactional 类事务说明机制

    @Transactional(noRollbackFor=RuntimeException.class) 方法事务说明 @TRacsactional(RollbackFor=Exception.class) @Tracsactional(readOnly=true); @Tracsactional(timeout=100) @Tracsactional(isolation)数据库的隔离级别 {     Read Uncommited:读取未提交的数据(会出现脏读 不可重复读 幻读)     Read Cimmited:读已提交的数据(会出现不可重复读和幻读)     Repeatable Read:可重复读(会出现幻读)     Serializable:串行化 }

    information {     脏读:一个事物读取到另外一个事物未提交的更新的数据     不可重复读:在同一个事物中,多次读取同一个数据返回结果有所不同 就是后续的读取可以读到另外一个事物的已经提交的更新数据     可重复读:在同一个事物多次读取数据时 能够保证所读取数据一样 也就是后读取的不能读到另外一个事物已经提交的数据     幻读:一个事物读取到另外一个事物已经提交的更新的数据 }

    针对查询方法 @Transactional(propagation=Propagation.NOT_SUPPORTED)针对某个方法不开启事务 @Transactional(propagation=Propagation.REQUIRED)默认的事务支持

    Propagation.REQUIRED

    Propagation.NOT_SUPPOKTED

    Propagation.REQUIRESNEW

    propagation.MANDATORY

    Propagation.SUPPOKTS

    Propagation.Never

    Propagation.NESTED

    XML配置事物

    注解配置事物例子

    public class Bean1{     @Transaction(propagation=Propagation.Required)     public void update(){         executeUpdate(SQL);     } }

    public class Bean2{     @Transaction(propagation=Propagation.Required)     public void update(){         executeUpdate(SQL);     } }

    public class TransactionExample {     @Transaction(propagation=Propagation.Required)     public void payment(){         daoBean1.update();         daoBean2.update();     } }

     

    //事务传播属性     @Transactional(propagation=Propagation.REQUIRED) //如果有事务,那么加入事 务,没有的话新建一个(不写的情况下)     @Transactional(propagation=Propagation.NOT_SUPPORTED) //容器不为这个方法 开启事务     @Transactional(propagation=Propagation.REQUIRES_NEW) //不管是否存在事务, 都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务     @Transactional(propagation=Propagation.MANDATORY) //必须在一个已有的事务中 执行,否则抛出异常     @Transactional(propagation=Propagation.NEVER) //必须在一个没有的事务中执 行,否则抛出异常(与Propagation.MANDATORY相反)     @Transactional(propagation=Propagation.SUPPORTS) //如果其他bean调用这个方 法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务.     /*public void methodName(){         update();//本类的修改方法 1             otherBean.update();//调用其他类的修改方法         update();//本类的修改方法 2     }     other失败了不会影响 本类的修改提交成功     本类update的失败,other也失败     */ @Transactional(propagation=Propagation.NESTED)

    @Transactional (propagation = Propagation.REQUIRED,readOnly=true) //readOnly=true只读,不能更新,删除

    @Transactional (propagation = Propagation.REQUIRED,timeout=30)//设置超时时间

    @Transactional (propagation = Propagation.REQUIRED,isolation=Isolation.DEFAULT)//设置数据库隔离级别

    最新回复(0)