To zależy od implementacji i konfiguracji JPA.
Domyślnie w EclipseLink połączenie jest utrzymywane tylko przez czas trwania aktywnej (brudnej) transakcji. tj. od pierwszej modyfikacji lub blokady, aż do zatwierdzenia lub wycofania. W przypadku zapytań nietransakcyjnych połączenie jest pobierane na żądanie i zwracane po wykonaniu zapytania. Pozwala to na maksymalne wykorzystanie puli połączeń. Tak więc normalnie em.close() nie robi nic.
Można to skonfigurować za pomocą właściwości jednostki trwałości "eclipselink.jdbc.exclusive-connection.mode". "Zawsze" będzie utrzymywać połączenie dla życia EntityManager.
Można również użyć różnych pul połączeń dla transakcji w porównaniu z odczytami nietransakcyjnymi. Jest to użyteczne w przypadku JTA, ponieważ do odczytu można użyć źródła danych innego niż JTA.
Znalazłem ten opis strategii zwalniania połączenia z Hibernate: http://docs.jboss.org/hibernate/stable/core.old/reference/en/html/transactions-connection-release.html – GlenPeterson