A well-designed DAO layer will enable loose/low coupling between data access logic, transaction management logic and business logic code.
Business object model classes containing business logic should not have data access code mixed in with the business logic. Data access logic involves much more than ".save" or ".persist" methods.
Ideally, business objects should have zero syntax-level dependencies upon commercial or open-source frameworks.
It is poor design and bad form to not have a DAO layer. The reasons and rationales are spelled out in documentation for the Data Access Object design
pattern.