O mecanismo de persistencia tem que abstrair isso do modelo. Ai esta a dificuldade em desenhar um modelo OO “puro” e ter que persisti-lo sem apoio de frameworks sofisticados como o Hibernate. A camada de persistencia tem que lidar “no braco” com coisas como lazy-loading, cache, locks, atualizacao em cascata, etc, o que nao eh trivial, definitivamente.
O que acaba acontecendo eh um modelo “hibrido”, em que voce tem que tomar cuidade com os NullPointerException, sem saber se o dado esta na base e ainda nao foi carregado ou se realmente a entidade nao tem aquele dado.
Conheço pouco de hibernate, por causa de um projeto que trabalhei, mas depois que você ja tem algum conecimnento, a manutencoa fica mais facil que no metodo tradicional DAO.