Como fica a modelagem usando Hibernate

Olá,

Começei a estudar o framework Hibernate, porém surgiram umas dúvidas onde não estou conseguindo chegar em consenso.
A dúvida é, como deveriam ser divididas as camadas da aplicação. Lendo sobre patterns vi que é muito importante manter alta coesão dos dados e dos comportamentos, mas por outro lado vejo que muita gente usa classes DTO (só para conter os dados) e classes Services (operações sobre as classes DTOs), isso acaba com a coesão. Então, na camada de modelo, uma classe assim:

public class Produto {
    private String nome;
    private Double preco;
    
    /*getters e setters suprimidos*/

    public void insert();
    public void delete();
    public void update();
    public void load();
}

…seria correto?
Só que fazendo assim, eu poderia estar colocando as Anotations do EJB nesta classe (para o hibertante fazer o mapping)? Lembrando que nesta classe eu estaria colocando as minhas regras de negócio relacionadas produto.
Seria interessante ter uma DAO para a classe de Produto só para tratar da persistencia com o hibernate? se estou errado, como eu deveria dividir a estrutura das minhas classes?

Obrigado pela atenção galera!

Cara, eu aconhelharia a utilização do DAO sim… Não gosto muito dessa ideia de objetos que sabem se persistir, embora me falta conhecimento no assunto para ser contra.