Транзакции не должны быть обязанностью DAO, их нужно контролировать на более высоком уровне.DAO должен быть чем-то, что выполняет запросы и обновления, не зная об общей картине, вызовы DAO могут быть сгруппированы в объекте, таком как сервис Spring или EJB-сессионный компонент, который отвечает за решение того, что нужно объединить в транзакции.Это делает ваш код DAO более пригодным для повторного использования, поскольку ему не нужно много знать о контексте, в котором он работает.
Посмотрите, как это делает Spring (в примерах приложений, таких как petstore, которые поставляются с Spring),или, что еще лучше, посмотрите книгу King / Bauer Hibernate-JPA, в которой есть глава о создании DAO.