在哪里使用@Transactional批注和@Repository批注

时间:2018-10-23 22:56:34

标签: spring orm annotations spring-transactions

Internet上的某些示例在DAO实现方法上使用@Transactional批注,而某些示例在服务层方法中使用此批注。将@Transactional放在哪里更合适?为什么?

类似地,将@Repository注释放在何处。在DAO界面上还是在DAO实现上?

1 个答案:

答案 0 :(得分:1)

我一直在其实现中使用@Service@Repository批注,但可以将它们放在任一批注中。不过,将其放在接口上将意味着您将无法实现多个实现,因为会遇到NoUniqueBeanDefinitionException错误。

@Transactional的情况下,它取决于,但是通常它在服务上进行。如果您希望能够在一个事务上添加各种数据库调用,则应将其放入服务中。如果您要进行小笔交易,那么最好在DAO上进行,但是,那么您将无法在单个交易中修改多个表。在DAO上进行修改的另一个缺点是,您将无法回滚多个修改,而只能回滚DAO执行的修改。