Galera, estou iniciando em hibernate agora!
Segui vários tutoriais, de vário sites na net e pelo que vi todos optam por um certo padrao DAO!
Os exemplos básicos que li na net, pelo que vi sempre criavam uma DAO pra cada classe por exemplo: PessoaDAO, PessoaFisicaDAO, PessoaJuridicaDAO, ClienteDAO.
Observei na internet que muitos lugares mencionam classes DAO genéricas!
Outra duvida que me surgiu é, a sessao deve ser criada dentro da classe DAO, ou passada como um parametro para classe DAO? metodos como load precisam que a sessoa estejam abertas!
Estou iniciando, mas gostaria de comecar da melhor maneira para n sobrar vicios, ou evoluir erradamente, tente criar uma classe DAO generica, segue a mesma abaixo! Quero opinioes de como melhora-la para chegar no seu ideal, ou se estou seguindo alguma abordagem errada!
Desde já agradeço!
[code]import java.io.Serializable;
import org.hibernate.*;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
public class GenericDao<T> {
private Session session;
private Class persistentClass;
private SessionFactory factory;
public GenericDao() {
}
public GenericDao(Session session) throws Exception {
this.session = session;
}
public GenericDao(Class persistentClass) throws Exception {
this.factory = new Configuration().addClass(persistentClass)
.buildSessionFactory();
this.session = this.factory.openSession();
this.persistentClass = persistentClass;
}
public GenericDao(Session session, Class persistentClass) throws Exception {
this.session = session;
this.persistentClass = persistentClass;
}
@SuppressWarnings("unchecked")
public T search(Serializable id) {
return (T) session.load(persistentClass, id);
}
public void insert(T object) throws Exception {
Transaction tx = this.session.beginTransaction();
session.save(object);
session.flush();
tx.commit();
}
public void update(T object) throws Exception {
Transaction tx = this.session.beginTransaction();
session.update(object);
session.flush();
tx.commit();
}
public void delete(T object) throws Exception {
Transaction tx = this.session.beginTransaction();
session.delete(object);
session.flush();
tx.commit();
}
}[/code]