在dao层和服务层中使用@Transactional有什么区别?

时间:2015-02-16 10:50:31

标签: java spring-mvc

在dao图层和服务图层中使用@Transactional有什么区别?

@Transactional
class UserDAO{}

@Transactional
class UserService{}

我们可以在这两个图层中添加此注释。那有什么区别?

2 个答案:

答案 0 :(得分:2)

如果在Service层添加@Transactional注释,并且您正在对数据库执行多个操作,那么所有这些操作都将在一个事务中,并且您可以确保两个操作都被提交,如果有的话他们失败然后回滚。

例如:您希望创建一个Employee,并且您的业务规则表明,对于您创建的每个Employee,您需要在数据库中创建User。在这种情况下,我们将在服务层使用Transactional注释

@Service
public class EmployeeService {

    ....

    @Transactional
    public int createEmployee(Employee emp) {
        //create Employee
        employeeDao.createEmployee(emp);

        User user = new User();
        // some fileds of employee are used to create a User
        user.setEmployeeId(emp.getEmployeeId());
        ....

        userDao.createUser(user);
        ...
    }
}

答案 1 :(得分:1)

完全没有区别。但最佳做法是在服务层使用它。有时您需要通过多个实体进行交易。因此,如果您手动在dao中声明事务。并且您使用两种方法从服务中调用方法,您将在一次调用中拥有两个事务。这就是你不想要的东西。