Tôi có một lớp truy cập dữ liệu chạy như một phần của ứng dụng java độc lập. Nó hiện đang làm việc có nghĩa là một người quản lý giao dịch được định nghĩa nhưng tôi muốn cấu trúc lại lớp để giảm phạm vi giao dịch nhưng nếu tôi nhận được org.hibernate.HibernateException: Không có phiên Hibernate nào bị ràng buộc vào luồng và cấu hình không cho phép tạo một giao dịch phi giao dịch tại đây ngụ ý rằng việc di chuyển @Transactional bằng cách nào đó đã ngăn không cho nó được nhận dạng.Làm cách nào để bạn tái cấu trúc phương thức @Transactional để tách các phần không giao dịch
Phiên bản gốc của tôi có các phương pháp được cấu trúc lại là riêng tư nhưng tôi đã tìm thấy đề xuất thay đổi điều đó thành công khai như trong một số trường hợp, chú thích sẽ không được chọn.
public class DoStuff {
@Transactional
public void originalMethod() {
// do database stuff
...
// do non-database stuff that is time consuming
...
}
}
Những gì tôi muốn làm là cấu trúc lại như sau
public class DoStuff {
public void originalMethod() {
doDatabaseStuff()
doNonDatabaseStuff()
}
@Transactional
public void doDatabaseStuff() {
...
}
public void doNonDatabaseStuff() {
...
}
}
Người quản lý giao dịch của bạn ở đâu? Bạn có thể thêm chi tiết hơn không? – Chris
DoStuff lớp của bạn có triển khai bất kỳ giao diện nào không? –
Không có giao diện và trình quản lý giao dịch được định nghĩa là nó hoạt động đối với lớp gốc. –