У вас не должно быть логики транзакций внутри DAO именно по этой причине.
Обычно существует сервисный уровень, который владеет подключением к базе данных и единицей работы. Он запускает транзакцию, вызывает все участвующие DAO и очищает ее после завершения транзакции.
Среда Spring использует аспекты для реализации транзакционной логики. У вас будут интерфейсы для всех этих DAO. Spring сгенерирует прокси, который будет обрабатывать транзакцию декларативно. Возможно, вы могли бы использовать некоторые из этих концепций дизайна, даже если вы не используете Spring.
Или просто учить весну. Он прекрасно поддерживает iBatis.