Trước hết, việc quản lý giao dịch nên được thực hiện trên lớp dịch vụ, chứ không phải trên lớp DAO vì điều đó sẽ tạo ra nhiều chi phí hiệu năng (để xử lý mức độ cách ly giao dịch phù hợp và lan truyền ở mỗi phương thức khác nhau). Ngoài ra, phạm vi của một đơn vị công việc đến từ lớp dịch vụ thay vì lớp truy cập dữ liệu: hãy tưởng tượng thực hiện một quy trình kinh doanh cần xử lý từ 2 DAO trở lên.
Có rất nhiều cuộc thảo luận trên Internet chỉ ra hướng đó như ở đây , ở đây và ở đây .
Dù sao, vì đó là một cuộc phỏng vấn, hãy chấp nhận câu hỏi như vậy. Theo quan điểm của tôi, bạn sẽ sử dụng @Transactional
chú thích (hoặc cấu hình XML) trong cả hai phương thức và với việc truyền bá giao dịch có REQUIRED
giá trị. Theo cách đó, khi bất kỳ phương thức nào được gọi và nếu không có giao dịch nào trước đó, một giao dịch mới sẽ được tạo:
@Transactional
class MyDAO {
@Transactional(propagation = REQUIRED)
public void foo() {
}
@Transactional(propagation = REQUIRED)
public void bar() {
}
}
foo()
vàbar()
chia sẻ cùng một giao dịch và nếu 1 thất bại thì 1 khác cũng sẽ quay trở lại? Bạn có thể cung cấp một số làm rõ?