Internet上的某些示例在DAO实现方法上使用@Transactional
批注,而某些示例在服务层方法中使用此批注。将@Transactional
放在哪里更合适?为什么?
类似地,将@Repository
注释放在何处。在DAO界面上还是在DAO实现上?
答案 0 :(得分:1)
我一直在其实现中使用@Service
和@Repository
批注,但可以将它们放在任一批注中。不过,将其放在接口上将意味着您将无法实现多个实现,因为会遇到NoUniqueBeanDefinitionException
错误。
在@Transactional
的情况下,它取决于,但是通常它在服务上进行。如果您希望能够在一个事务上添加各种数据库调用,则应将其放入服务中。如果您要进行小笔交易,那么最好在DAO上进行,但是,那么您将无法在单个交易中修改多个表。在DAO上进行修改的另一个缺点是,您将无法回滚多个修改,而只能回滚DAO执行的修改。