Мое личное предпочтение в hibernate - не настраивать его с пулом соединений вообще. Это можно сделать, просто опустив настройки пула соединений в нашей конфигурации гибернации и используя метод openSession (Connection):
Connection conn = ... // get from jndi
Session session = sessionFactory.openSession(connection);
try{
//do some work with either hte connection or the session or both
}finally{
session.close();
conn.close();
}
Преимущество этого заключается в том, что вы контролируете, какое соединение используется и где оно размещено, и, что наиболее важно, где оно закрыто, это может быть важно, если вы выполняете транзакцию с использованием кода hibernate и jdbc.
РЕДАКТИРОВАТЬ: @ ChssPly76 указывает на исключение встроенного управления транзакциями в hibernates, и он совершенно прав, hibernate обеспечивает разумную поддержку транзакций и, если данный JTA будет синхронизироваться с любой выполняющейся транзакцией. В JTA-приложении, в котором требуется, чтобы код hibernate и jdbc работали в одной и той же транзакции jdbc, важно убедиться, что сеанс hibernate использует то же соединение, что и код jdbc, лучший способ сделать это - дать Подключение к фабрике сессий. Обратите внимание, что это не исключает использование объекта транзакции Hibernate:
Connection conn = ... // get from jndi
Session session = sessionFactory.openSession(connection);
try{
Transaction tx = new Transaction(); //
//do some work with either hte connection or the session or both
tx.commit();
}finally{
session.close();
conn.close();
}
все будет работать нормально.