Dipende dall'implementazione e dalla configurazione di JPA.
In EclipseLink per impostazione predefinita una connessione viene mantenuta solo per la durata di una transazione (sporca) attiva. vale a dire dalla prima modifica o blocco, fino al commit o al rollback. Per le query non transazionali, una connessione viene acquisita su richiesta e restituita dopo l'esecuzione della query. Ciò consente l'utilizzo massimo del pool di connessioni. Quindi, normalmente em.close() non fa nulla.
È possibile configurarlo utilizzando la proprietà dell'unità di persistenza "eclipselink.jdbc.exclusive-connection.mode". "Sempre" manterrà una connessione per la vita di EntityManager.
È inoltre possibile utilizzare diversi pool di connessione per le transazioni, anziché le letture non transazionali. Ciò è utile con JTA, poiché è possibile utilizzare un DataSource non JTA per le letture.
Ho trovato questa descrizione delle strategie di rilascio della connessione con Hibernate: http://docs.jboss.org/hibernate/stable/core.old/reference/en/html/transactions-connection-release.html – GlenPeterson