IMHO giao dịch sẽ chuyển sang lớp dịch vụ. Thông thường, một giao dịch kinh doanh bao gồm một số truy vấn và cập nhật. Nếu bạn đặt @Transactional
chỉ trên DAO lớp, mỗi truy vấn và cập nhật sẽ chạy trong một giao dịch riêng biệt, có hiệu quả đánh bại mục đích của giao dịch.
Nhưng nếu dịch vụ là @Transactional
, mỗi tương tác cơ sở dữ liệu sẽ tham gia một giao dịch chính bắt đầu khi lớp web được nhập vào lớp dịch vụ. Lưu ý rằng trong trường hợp này nếu lớp web chạy một số phương thức dịch vụ, mỗi lớp sẽ chạy trong một giao dịch riêng biệt (cùng một vấn đề đã chuyển lên một cấp). Tuy nhiên, việc đặt @Transactional
trong lớp web có thể giới thiệu các hiệu ứng phụ không mong muốn như vấn đề N + 1, sự cố này sẽ bị chặn lại. Vì vậy, cố gắng giữ một giao dịch kinh doanh trong một phương thức dịch vụ được gọi là từ lớp web.
Nguồn
2012-01-24 20:10:57
u có thể giải thích cho tôi rõ ràng ... –
@JustinThomas Đó là như hữu ích, nhưng khác nhau. –