如何使用@Transactional注释在春季加入父变换

时间:2016-10-12 11:37:51

标签: java spring transactions jdbctemplate spring-transactions

我对spring的交易很新。由于我的组织使用了一些代码标准,我要求在调用任何方法时加入父事务。

我的应用程序是一个有三层的Spring MVC应用程序

  1. 网络层(控制器类)
  2. 服务层(包含业务逻辑的服务类)
  3. DAO Layer(用于DB相关查询的DAO(数据访问层)类)
  4. 现在在服务层上的方法中使用了三种不同的dao层方法。我已经使用@Transactional将此服务方法注释为事务性的。现在我希望从这个服务层方法调用的所有三个dao方法本质上也是事务性的,并且必须加入由服务层方法启动的父事务,并坚持为每个dao方法启动其他新的翻译。

2 个答案:

答案 0 :(得分:1)

您需要使用REQUIRES_NEW传播来注释您的服务方法。这将标志着交易的开始。默认情况下,如果此方法调用dao方法将继承事务行为并使用现有事务。

但是,如果要在代码中表示事务边界,可以使用REQUIRED对其进行注释(如果存在则参与事务或创建新的if ifn不存在)或{{1 (如果存在则参与事务,否则抛出异常)。

MANDATORY

答案 1 :(得分:0)

您可以使用propagation注释中的@Transactional元素和属性Propagation.MANDATORY。有了这个,该方法支持当前事务,或者如果没有活动事务则抛出异常。因此,在您的DAO层中,您可以执行以下操作:

@Transactional(propagation=Propagation.MANDATORY)
public void daoMethod() { // some logic }