La perte de connexion à MySQL après un certain temps, et pas de la reconnexion

Je suis le développement d'un serveur autonome qui utilise JPA+Hibernate pour accéder à une base de données MySQL.

Quand je lance le serveur, tout fonctionne bien. Cependant, après un certain temps (généralement le lendemain matin, si je le commence dans l'après-midi), il s'arrête de travailler parce qu'apparemment la connexion à MySQL a été fermé (je vois beaucoup de SocketExceptions dans les journaux). Ceci est probablement causé par la marche au ralenti, le serveur est en cours de développement et personne ne l'utilise la nuit.

Je pensais que Hibernate, JDBC ou d'une autre couche en dessous de mon application serait de gérer la connexion et la rouvrir si nécessaire, mais apparemment pas. Est-il un paramètre de configuration j'ai raté?

persistence.xml

http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">

<persistence-unit name="manager">

<class>example.data.entities.User</class>
<class>example.data.entities.Player</class>

<properties>
    <property name="hibernate.dialect" value="example.data.HibernateDialect" />
    <property name="hibernate.max_fetch_depth" value="3" />
    <property name="hibernate.hbm2ddl.auto" value="update" />

    <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />

</properties>

</persistence-unit>

EntityManagerFactory création

    log.info("Connecting to database @ " + dbUrl + " using " + dbUser + "/" + dbPass);

    emf = Persistence.createEntityManagerFactory("manager", Maps.create(
            "javax.persistence.jdbc.user", dbUser,
            "javax.persistence.jdbc.password", dbPass,
            "javax.persistence.jdbc.url", dbUrl
    ));

Une requête

            try
            {

                TypedQuery<User> q = em.createQuery("SELECT u FROM User u WHERE u.email = :mail", User.class);
                q.setParameter("mail", email);
                try {
                    u = q.getSingleResult();
                    log.info("Authenticating: " + u);
                } catch (NoResultException e) {
                    return false;
                }

            } finally {
                em.close();
            }