Концепция пула соединений именно такая. У вас есть пул открытых соединений, и когда вам нужно выполнить транзакцию, вы получаете соединение, уже открытое. Таким образом, вы экономите много времени на открытии и закрытии соединений. Но вы платите цену, чтобы сохранить открытые соединения, когда вы ими не пользуетесь.
У вас есть больше информации о конфигурации c3p0
Обновление Очевидно, ОП вызывал buildSessionFactory
один раз за сеанс. Это должно вызываться один раз за время существования приложения.
Вот служебный класс, который создает sessionFactory из Hibernate и предоставляет класс сеанса тому, кто его запрашивает. Это камень для класса DAO.
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.classic.Session;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
// Create the SessionFactory from hibernate.cfg.xml
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static Session getCurrentSession() {
return sessionFactory.getCurrentSession();
}
}