Je to proto, že používáte fond připojení, který byl vytvořen, jakmile sestavíte SessionFactory, ale připojení se získají pouze tehdy, když otevřete relaci. Nyní zavíráte relaci, kvůli které jsou připojení uvolněna, ale nejsou uzavřena a jsou zdržována fondem. Nyní znovu vytváříte SessionFactory, tedy vytváříte nový fond, pak získáváte relaci, tudíž vytváříte nové připojení a tak dále.. které nakonec dosáhne maximálního povoleného počtu připojení.
Musíte použít jeden fond připojení (pomocí jedné SessionFactory) a získat a uvolnit připojení ze stejného fondu.
public class DBConnection {
private static SessionFactory factory;
static {
factory = new Configuration().configure().buildSessionFactory();
}
public Session getSession() {
return factory.openSession();
}
public void doWork() {
Session session = getSession();
// do work.
session.close();
}
// Call this during shutdown
public static void close() {
factory.close();
}
}