У меня есть большое приложение, которое раньше сохраняло данные в файлах, теперь я переносу его в PostgreSQL. Все операции записи выполняются в явных транзакциях, заканчивающихся коммитом или откатом, при этом блоки «finally» в java корректно кодируются.
Даже в режиме автоматической фиксации вы все равно можете запускать транзакцию при необходимости. И мое приложение делает. Также для случая SELECT, который должен быть совместим с другими записями, это делается в транзакции.
Проблема возникает только для операций только для чтения. Если автокоммит выключен, Hibernate автоматически запускает транзакцию даже для выбора. Поскольку он никогда не фиксируется и не откатывается, он остается активным всегда, поэтому в конечном итоге все пулы соединений pg_bouncer используются и новые транзакции блокируются. Это то, что я пытаюсь решить.
С автокоммитом на моем приложении работало просто отлично.
Итак, вопрос: каких недостатков я могу ожидать? (Опять все записи производятся между началом транзакции и фиксацией в любом случае.)
(В моем коде достаточно много операций только для чтения, поэтому я бы хотел избежать длительного рефакторинга их всех, чтобы добавить совершайте в каждом случае и рискуйте ошибкой, если я забуду одну. Если, конечно, вы не укажете веские причины для этого в ответах.)