在dao图层和服务图层中使用@Transactional
有什么区别?
@Transactional
class UserDAO{}
或
@Transactional
class UserService{}
我们可以在这两个图层中添加此注释。那有什么区别?
答案 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中声明事务。并且您使用两种方法从服务中调用方法,您将在一次调用中拥有两个事务。这就是你不想要的东西。