Нет ничего, что заставило бы вас иметь слой DAO.
UI <-> Service <-> DAO <-> persistence
Код на вашем уровне сеанса - это то, что обычно входит в слой DAO. То есть небольшие (почти атомные) операции, такие как сохранение, удаление и т. д.
Сервисный уровень предназначен для изоляции бизнес-логики, которая была бы неудобной на простом уровне хранения. Например, если вы хотите работать с несколькими экземплярами Person за раз или с какой-то конкретной бизнес-логикой перед сохранением объекта. Другим распространенным использованием RDBM является управление транзакциями на уровне обслуживания, координирующее, возможно, несколько запросов DAO в транзакции.
Во многих простых приложениях сервисный уровень несколько бессмыслен. Он просто проксирует операции, как и вы, от пользовательского интерфейса до DAO, - добавлена никакая логика. В этих случаях я лично не обязательно создавал бы слой DAO, сохранял бы хранилище в сервисе, но реорганизую его в ту самую минуту, когда он растет, а не просто простой слой сохранения.
Другим аспектом является модульное тестирование. Простой слой DAO можно легко высмеять, что является аргументом в пользу строгого разделения деловой логики и настойчивости.