Tôi thực sự bối rối về tuyên truyền giao dịch trong Spring with Hibernate. Tôi sử dụng chú thích Spring @Transactional
trên các phương thức lớp dịch vụ của mình. Một số được đánh dấu là 'read-only = true'. Nếu một trong các phương thức dịch vụ chỉ đọc của tôi gọi một phương thức không chỉ đọc, tôi có thể giải quyết vấn đề này bằng cách nào? Tôi nghĩ tôi có thể đánh dấu tất cả các phương pháp đọc-ghi của mình để hỗ trợ tuyên truyền REQUIRES_NEW
nhưng điều này sẽ dẫn đến hành vi mà tôi có thể không muốn - tức là tôi chỉ muốn một giao dịch mới trong trường hợp phương pháp chỉ đọc là được gọi là phương pháp đọc-ghi. Nếu phương thức đọc-ghi gọi phương thức đọc-ghi khác, tôi sẽ không cần giao dịch mới.Truyền thông giao dịch hoạt động như thế nào khi sử dụng Phiên mở trong chế độ xem?
Cân nhắc tất cả những điều này, tôi không hiểu cách Open Session In View (OSIV) hoạt động như thế nào! Chắc chắn, bằng cách sử dụng OSIV trong mùa xuân, các OpenSessionInViewFilter
phải có để bắt đầu một giao dịch trước khi các phương pháp dịch vụ được gọi. Trong trường hợp đó, nó phải xác định xem giao dịch là chỉ đọc hoặc đọc-ghi. NHƯNG, làm thế nào nó có thể biết điều này? Nó không biết điều gì sẽ xảy ra dưới lớp phủ của lớp dịch vụ.
Tôi hoàn toàn trong bóng tối trên tất cả những điều này và sẽ yêu ai đó giải thích cho tôi!