Tôi đang phát triển một ứng dụng JPA (có ngủ đông), và tôi đang đấu tranh với tính năng AutoFlush.Ngăn chặn tuôn ra của EntityManager khi chọn một dữ liệu nhất định
Theo mặc định, bất cứ khi nào chúng tôi xử lý truy vấn trên bất kỳ thực thể nào, toàn bộ EntityManager bị xóa. Điều này là ok trong hầu hết các trường hợp: Chúng tôi muốn JPA xử lý các truy vấn đối với một DB cập nhật.
Tuy nhiên, điều đó xảy ra là chúng tôi cũng lưu trữ một số thông số chức năng trong DB của chúng tôi. Điều này hoàn toàn tách biệt với mô hình kinh doanh cốt lõi của chúng tôi, và chúng tôi không muốn chọn các thông số mà chúng tôi đã xóa EM: Lấy thông số có thể xảy ra khá sâu trong quá trình và chúng tôi mất kiểm soát xả EM khi chúng tôi biết; .
Thật vậy, điều này gây ra một số ngoại lệ ràng buộc DB: Mô hình dữ liệu không nhất quán (ở giữa quy trình) và chọn tham số buộc thực thi mô hình dữ liệu này.
Tôi đang cân nhắc việc thêm một thực thể thứ haiManager, chỉ là thông số, nhưng tôi thấy nó quá mức cần thiết.
Có thể giải quyết dễ dàng hơn không? Với mức cô lập trên thông số DAO, để các tham số được xử lý trong một giao dịch riêng biệt?
Tôi thực sự tò mò làm thế nào bạn "có thể mở một kết nối mới từ hồ bơi kết nối XA của bạn", bạn có thể cung cấp thêm chi tiết về điều đó không ?. PS: Nó có thể là một giải pháp thú vị, nhưng đến nay không sử dụng các API chuẩn. –
Kiểm tra [HibernateSQLStatementCountTest] của tôi (https://github.com/vladmihalcea/vladmihalcea.wordpress.com/blob/master/hibernate-facts/src/test/java/com/vladmihalcea/HibernateSQLStatementCountTest.java). Nó mở rộng 2 nguồn dữ liệu: testDataSource và otherDataSource trong cùng một giao dịch cho cùng một DB, mỗi một với kết nối riêng của nó. DEBUG [main]: bttPreparer - chuẩn bị tài nguyên một XAResourceHolderState với uniqueName = otherDataSource DEBUG [main]: bttPreparer - chuẩn bị tài nguyên một XAResourceHolderState với uniqueName = testDataSource –
Đó không phải là những gì bạn mô tả trong câu trả lời của bạn: trên github bạn có hai khác nhau ' DataSource's và trong câu trả lời của bạn, bạn đang nói về việc lấy hai kết nối cho cùng một 'DataSource'. –