6

Kết nối chỉ được trả về hồ bơi Kết nối trong ứng dụng JPA nếu tôi gọiKhi nào một kết nối được trả về hồ bơi kết nối trong một ứng dụng JPA?

entityManager.close(); 

?

Kết nối có thể hỗ trợ thay đổi entitymanger trong vòng đời của nó không?

cảm ơn trước mojoo

+2

Tôi tìm thấy mô tả về các chiến lược phát hành kết nối này với Hibernate: http://docs.jboss.org/hibernate/stable/core.old/reference/en/html/transactions-connection-release.html – GlenPeterson

Trả lời

4

Các JPA spec không xác định những việc như vậy và lên của mình trong việc thực hiện quản lý kết nối. Khi một giao dịch được kích hoạt, bạn sẽ được an toàn để giả sử kết nối là như nhau cho đến khi cam kết, vì lý do rõ ràng. Khi txn kết thúc, nó có thể được trả lại, hoặc nó có thể được tổ chức tùy thuộc vào việc thực hiện (và bạn không đề cập đến bạn)

2

Điều này phụ thuộc vào việc thực hiện và cấu hình JPA.

Trong EclipseLink theo mặc định, kết nối chỉ được giữ trong khoảng thời gian của giao dịch đang hoạt động (bẩn). tức là từ lần sửa đổi hoặc khóa đầu tiên, cho đến khi cam kết hoặc quay lại. Đối với các truy vấn không giao dịch, kết nối được mua theo yêu cầu và được trả về sau khi thực hiện truy vấn. Điều này cho phép sử dụng tối đa kết nối tổng hợp. Vì vậy, bình thường em.close() không làm gì cả.

Bạn có thể định cấu hình điều này bằng cách sử dụng thuộc tính đơn vị lưu giữ "eclipselink.jdbc.exclusive-connection.mode". "Luôn luôn" sẽ giữ một kết nối cho cuộc sống của EntityManager.

Bạn cũng có thể sử dụng các hồ bơi kết nối khác nhau cho các giao dịch, so với các lần đọc không giao dịch. Điều này rất hữu ích với JTA, vì bạn có thể sử dụng một nguồn dữ liệu không JTA để đọc.

Các vấn đề liên quan