Во-первых, прочитайте это Почему мне нужно использовать наконец для закрытия ресурсов?
В JDBC есть несколько видов ресурсов, которые в идеале должны быть закрыты после использования.Даже если для каждого Statement и PreparedStatement задано неявное закрытие при закрытии объекта Connection, вы не можете быть уверены, когда (или если) это произойдет, особенно если он используется с пулами соединений.Вы должны явно закрыть ваши объекты Statement и PreparedStatement, чтобы быть уверенными.Объекты ResultSet также могут быть проблемой, но поскольку они гарантированно закрываются при закрытии соответствующего объекта Statement / PreparedStatement, вы обычно можете его игнорировать.
В Hibernate, очевидно, внутренняя реализация заботится о создании изакрытие ресурсов.Если вы хотите узнать больше, вы всегда можете прочитать исходный код Hibernate.
Summary : всегда закрывать PreparedStatement / Statement и Connection.До Java 7 было рекомендовано закрывать ресурсы в блоке finally, так как блок finally всегда выполняется независимо от исключения в блоке try. Однако в Java 7+ вы бы использовали идиому try-with-resources, чтобы это произошло автоматически.