在哪个地方放置Transactional Spring注释,在哪个层?

时间:2014-11-11 08:48:44

标签: spring hibernate spring-mvc annotations transactional

我怀疑放置Spring注释,在哪一层?这是两种情况:

  1. 案例:将@Transactional放入DAO图层

  2. 案例:将@Transactional放入服务层?

  3. 我只使用Spring,而不是SpringMVC。

3 个答案:

答案 0 :(得分:4)

您希望自己的服务为@Transactional。如果您的DAO是事务性的,并且您在每个服务中调用不同的DAO,那么您将有多个tansaction,这不是您想要的。进行服务调用@Transactional,这些方法中的所有DAO调用都将参与该方法的事务。

Refer this link for more details

答案 1 :(得分:3)

将它放在服务层中,因为服务可能希望访问多个DAO方法,但这些方法仍将被视为同一业务事务的一部分。

答案 2 :(得分:2)

事务通常意味着您希望将一些操作组合在一起 例如:

void bankTransfer(String fromAccount, String toAccount, BigDecimal amount)
{
if (amount.compareTo(BigDecimal.ZERO) < 0) throw new RuntimeException("hack attempt");
accountDao.deduct(fromAccount, amount);
accountDao.add(toAccount, amount);
}

这里银行转账有逻辑。 account dao没有逻辑,只是扣除并添加。