According to me, passing a persistable POJO, like for instance a bean managed by JPA, is not THE good practice.

Why?

I see three main reasons:

 1. Potential issue with lazy collections. http://java.dzone.com/articles/avoid-lazy-jpa-collections
 2. Entity should contain behaviour (in contrary of an [Anemic domain model][1])
 You may not want to let your UI call some unexpected behavior.
 3. In case of anemic domain model you may not want to expose your model structure to the UI, since every new change to model may break UI.

I prefer letting my service layer convert entities to corresponding DTO in both directions. DAO still returning entity (it's not its job to ensure the conversion). 

 

 


 [1]: http://en.wikipedia.org/wiki/Anemic_domain_model