Theo mặc định, trong một môi trường Java SE với cấu hình JDBC, đây là những gì sẽ xảy ra nếu bạn thực hiện đoạn này: 1. một phiên họp mới được mở ra. Nó không có được một kết nối cơ sở dữ liệu tại thời điểm này. 2. cuộc gọi để Get () gây nên một CHỌN SQL. Phiên giao dịch bây giờ có được một kết nối JDBC từ các hồ bơi kết nối. Ngủ đông, theo mặc định, ngay lập tức tắt chế độ autocommit trên kết nối này với setAutoCommit(false). Điều này một cách hiệu quả bắt đầu giao dịch JDBC! 3. CHỌN được thực hiện trong giao dịch JDBC này. Đóng cửa phiên giao dịch, và kết nối quay lại hồ bơi và phát hành bởi Hibernate — Hibernate kêu gọi close() kết nối JDBC. Điều gì sẽ xảy ra với khoản giao dịch? Câu trả lời cho câu hỏi đó là, "Nó phụ thuộc!" Đặc điểm kỹ thuật JDBC không nói bất cứ điều gì về đang chờ xử lý giao dịch khi close() được gọi là trên một kết nối. Điều gì sẽ xảy ra phụ thuộc vào cách các nhà cung cấp thực hiện đặc điểm kỹ thuật. Với trình điều khiển Oracle JDBC, ví dụ, các cuộc gọi đến close() cam kết giao dịch! Hầu hết các nhà cung cấp JDBC khác đi theo con đường sane và quay trở lại bất kỳ giao dịch đang chờ xử lý khi đối tượng kết nối JDBC đóng cửa và các nguồn tài nguyên là quay trở lại hồ bơi. Rõ ràng, điều này sẽ không là một vấn đề cho các lựa CHỌN bạn đã thực hiện! Có! Câu màu đỏ đã được nói bởi Hibernate tài liệu hướng dẫn, không phải tôi. Vì vậy, tôi kết luận tôi đúng khi tôi nói rằng bằng cách sử dụng rõ ràng một giao dịch cho một hoạt động đọc là một sự lãng phí đơn giản.
đang được dịch, vui lòng đợi..
