Olá a todos!
Sou um iniciante no mundo dos DAOs + Hibernate, assim gostaria de colher algumas opniões do pessoal mais experiente nessas ferramentas e tirar dúvidas sobre este assunto.
Primeiramente criei um DAO que faz as operações básicas para uma tabela/obj Cidade, como esse DAO foi baseado em exemplos diversos (leia-se ctrl+c ctrl+v) a verdade é que alguns conceitos não estão bem entendidos, assim gostaria que dessem uma olhada no código e fizessem observações e críticas construtivas.
Algumas observações e dúvidas:
- Antes de mais nada criei a configuração do pool c3po do hibernate;
- No construtor CidadeDAO() obtenho o sessionFactory = cfg.buildSessionFactory(); É correto obter a sessionFactory no construtor e consequentemente a cada instanciação do DAO?
- Da forma que foi implementado este DAO esta utilizando corretamente o pool de conexões c3po? Ou sem saber estou iniciando vários pools a cada instanciação do DAO?
- Caso esteja errado, qual seria a maneira correta de implementar esse DAO?
- Qualquer comentário e dicas são muito bem vindos!
Muito obrigado pessoal!
[code]public class CidadeDAO {
private SessionFactory sessionFactory;
public CidadeDAO() throws Exception {
Configuration cfg = new Configuration();
cfg.addClass(Cidade.class);
//cfg.setProperty("hibernate.show_sql", "true");
this.sessionFactory = cfg.buildSessionFactory();
}
public Cidade getById(Integer Id) throws HibernateException {
Session session = sessionFactory.openSession();
Cidade cidade = (Cidade) session.get(Cidade.class, Id);
session.flush();
session.close();
return cidade;
}
public List getList() throws HibernateException {
Session session = sessionFactory.openSession();
List list = session.find("select c from Cidade c");
session.flush();
session.close();
return list;
}
public List getListFirst(int qtd) throws HibernateException {
Session session = sessionFactory.openSession();
Query query =
session.createQuery("from Cidade as c order by c.idCidade");
query.setMaxResults(qtd);
List list = query.list();
session.flush();
session.close();
return list;
}
public List getListLast(int qtd) throws HibernateException {
Session session = sessionFactory.openSession();
Query query =
session.createQuery("from Cidade as c order by c.idCidade desc");
query.setMaxResults(qtd);
List list = query.list();
session.flush();
session.close();
return list;
}
public List getListByNome(String nomeCidade) throws HibernateException {
Session session = sessionFactory.openSession();
List list =
session.find(
"select c from Cidade c where c.nomeCidade like :nomeCidade",
nomeCidade.toUpperCase() + "%",
Hibernate.STRING);
session.flush();
session.close();
return list;
}
public List getListByEstado(String idEstado) throws HibernateException {
Session session = sessionFactory.openSession();
List list =
session.find(
"select c from Cidade c where c.idEstado = :idEstado",
idEstado,
Hibernate.STRING);
session.flush();
session.close();
return list;
}
public void save(Cidade cidade) throws HibernateException {
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
try {
session.saveOrUpdateCopy(cidade);
transaction.commit();
} catch (HibernateException e) {
transaction.rollback();
throw e;
} finally {
session.close();
}
}
public void delete(Cidade cidade) throws HibernateException, SQLException {
Session session = sessionFactory.openSession();
session.delete(cidade);
session.flush();
session.connection().commit();
session.close();
}
}[/code]