@Transactional在类级别时如何使用readonly

时间:2011-12-22 13:58:46

标签: hibernate spring java-ee

我在调用@Transactional方法的service课程中使用DAO 我想知道如何才能在特定的服务方法上使用只读 我是否必须在此服务方法上使用@Transactional定义额外的readonly=true,还是有另一种方式?

1 个答案:

答案 0 :(得分:7)

来自Spring API here

在评估方法的事务设置时,最多派生的位置优先。在以下示例的情况下,DefaultFooService类在类级别使用只读事务的设置进行注释,但同一类中updateFoo(Foo)方法的@Transactional注释优先于定义的事务设置在班级。

@Transactional(readOnly = true)
public class DefaultFooService implements FooService {

  public Foo getFoo(String fooName) {
    // do something
  }

  // these settings have precedence for this method
  @Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
  public void updateFoo(Foo foo) {
    // do something
  }
}

@Transactional注释是指定接口,类或方法必须具有事务语义的元数据;例如,“在调用此方法时启动全新的只读事务,暂停任何现有事务”。默认的@Transactional设置如下:

传播设置为PROPAGATION_REQUIRED。

隔离级别为ISOLATION_DEFAULT。

交易是可读/写的。

事务超时默认为基础事务系统的默认超时,如果不支持超时,则默认为none。

任何RuntimeException都会触发回滚,而任何已检查的Exception都不会。