Если вы создаете пул потоков, то вы не платите большую часть стоимости за подключение к транзакции или запросу, в зависимости от того, что вы делаете.
Я склонен делить мой код на более низком уровне на класс, который имеет дело с таблицей или каким-либо другим объектом, а затем над ним будет контроллер, который знает, как общаться с несколькими даосами. Например, чтобы разместить заказ на книгу, вы проверяете, есть ли он в наличии, затем обрабатываете платеж, затем уменьшаете позицию и размещаете заказ. Это будет транзакция, охватывающая несколько даосов, поэтому они должны использовать один и тот же сеанс.
Но использование одного соединения было бы проблематичным, так как вы на некоторое время связываете соединение и можете потерять соединение, предполагая, что оно все еще существует. Та же проблема будет усугубляться, если один запрос на экран или страницу.
Вы можете ознакомиться с некоторыми рекомендациями пользователей Spring, поскольку Hibernate, похоже, довольно популярен в этой среде.