Đ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.
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