Boa tarde pessoal.
Sou novo no mundo Java e muito entusiasmado. Vim do mundo desktop e PHP. Estou criando um programinha para aprendizado de JSF 2 + Hibernate 3. Meu ponto fraco é OO e padrões de projeto. Criei um Generic DAO e gostaria da opinião de vocês. Este negócio de Hibernate com JPA me confunde…rsss
Alguma opinião, crítica, etc?
GenericDAO:
package br.com.futurize.persistencia;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import br.com.futurize.seguranca.PermissaoClasses;
import br.com.futurize.seguranca.PermissaoException;
import br.com.futurize.util.ConfigCadastro;
import br.com.futurize.util.ConstantesGerais;
@SuppressWarnings("unchecked")
public class GenericDAO<T> {
@SuppressWarnings("rawtypes")
private Class persistentClass;
private Session session;
private String prefixo = "";
private String tabela = "";
private String fieldId = "";
private String fieldNome = "";
@SuppressWarnings("rawtypes")
protected GenericDAO(Session p_session, Class p_persistentClass) {
if ((p_session == null) || (!session.isOpen()))
session = HibernateUtil.getSession();
else
session = p_session;
persistentClass = p_persistentClass;
}
public Session getSession() {
return session;
}
@SuppressWarnings("rawtypes")
public Class getPersistentClassLocal(){
return persistentClass;
}
public void insert(T obj) throws Exception {
Transaction transaction = session.beginTransaction();
try {
if (!PermissaoClasses.VerificaPermissao(ConstantesGerais.PERMISAO_INSERT, persistentClass))
throw new PermissaoException("Permissão Negada para Inserção - " + PermissaoClasses.getDescricaoClasse(persistentClass.getName()));
session.save(obj);
session.flush();
transaction.commit();
} catch (Exception e) {
transaction.rollback();
throw new Exception(e);
}
}
public void update(T obj) throws Exception {
Transaction transaction = session.beginTransaction();
try {
if (!PermissaoClasses.VerificaPermissao(ConstantesGerais.PERMISAO_UPDATE, persistentClass))
throw new PermissaoException("Permissão Negada para Atualização - " + PermissaoClasses.getDescricaoClasse(persistentClass.getName()));
session.update(obj);
session.flush();
transaction.commit();
} catch (Exception e) {
transaction.rollback();
throw new Exception(e);
}
}
public void delete(T obj) throws Exception {
Transaction transaction = session.beginTransaction();
try {
if (!PermissaoClasses.VerificaPermissao(ConstantesGerais.PERMISAO_DELETE, persistentClass))
throw new PermissaoException("Permissão Negada para Exclusão - " + PermissaoClasses.getDescricaoClasse(persistentClass.getName()));
session.delete(obj);
session.flush();
transaction.commit();
} catch (Exception e) {
transaction.rollback();
throw new Exception(e);
}
}
public Integer count(List<Criterion> criterion) throws Exception {
try {
Criteria criteria = session.createCriteria(persistentClass);
for (Criterion c: criterion)
criteria.add(c);
criteria.setProjection(Projections.rowCount());
return ((Integer) criteria.uniqueResult()).intValue();
} catch (Exception e) {
throw new Exception(e);
}
}
public List<T> listAll(String fieldOrder, String ord) throws Exception {
try {
Criteria criteria = session.createCriteria(persistentClass);
addOrder(criteria, fieldOrder, ord);
return criteria.list();
} catch (Exception e) {
throw new Exception(e);
}
}
public List<T> listAll(int first, int max, String fieldOrder, String ord, List<Criterion> criterion) throws Exception {
try {
Criteria criteria = session.createCriteria(persistentClass);
addOrder(criteria, fieldOrder, ord);
for (Criterion c: criterion)
criteria.add(c);
if (first != 0)
criteria.setFirstResult(first - 1);
if (max != 0)
criteria.setMaxResults(max);
return criteria.list();
} catch (Exception e) {
throw new Exception(e);
}
}
public List<T> listAllCadastro(int first, int max, String fieldOrder, String ord, List<Criterion> criterion) throws Exception {
try {
if (!PermissaoClasses.VerificaPermissao(ConstantesGerais.PERMISAO_CADASTRO, persistentClass))
throw new PermissaoException("Permissão Negada para Seleção - " + PermissaoClasses.getDescricaoClasse(persistentClass.getName()));
return listAll(first, max, fieldOrder, ord, criterion);
} catch (Exception e) {
throw new Exception(e);
}
}
public T findById(Long id) throws Exception {
try {
return (T) session.get(persistentClass, id);
} catch (Exception e) {
throw new Exception(e);
}
}
public String findByNome(Long id) throws Exception {
try {
Criteria criteria = session.createCriteria(persistentClass);
criteria.add(Restrictions.eq(getFieldId(), id)).setProjection(Projections.property(getFieldNome()));
criteria.uniqueResult();
if (criteria.uniqueResult() == null)
return "";
else
return criteria.uniqueResult().toString();
} catch (Exception e) {
throw new Exception(e);
}
}
public String findByColumn(Long id, String column) throws Exception {
try {
Criteria criteria = session.createCriteria(persistentClass);
criteria.add(Restrictions.eq(getFieldId(), id)).setProjection(Projections.property(column));
criteria.uniqueResult();
if (criteria.uniqueResult() == null)
return "";
else
return criteria.uniqueResult().toString();
} catch (Exception e) {
throw new Exception(e);
}
}
public String findByColumnValue(String findColumn, String findValue, String fieldReturn) throws Exception {
try {
Criteria criteria = session.createCriteria(persistentClass);
criteria.add(Restrictions.eq(findColumn, findValue)).setProjection(Projections.property(fieldReturn));
if (criteria.uniqueResult() == null)
return "";
else
return criteria.uniqueResult().toString();
} catch (Exception e) {
throw new Exception(e);
}
}
public String findByColumnValue(String findColumn, Long findValue, String fieldReturn) throws Exception {
try {
Criteria criteria = session.createCriteria(persistentClass);
criteria.add(Restrictions.eq(findColumn, findValue)).setProjection(Projections.property(fieldReturn));
if (criteria.uniqueResult() == null)
return "";
else
return criteria.uniqueResult().toString();
} catch (Exception e) {
throw new Exception(e);
}
}
public Boolean isUsedCadastro(String findColumnFK, Long findValue) throws Exception {
try {
Criteria criteria = session.createCriteria(persistentClass);
criteria.add(Restrictions.eq(findColumnFK, findValue));
Integer totalResult = (Integer)criteria.setProjection(Projections.rowCount()).uniqueResult();
return totalResult > 0;
} catch (Exception e) {
throw new Exception(e);
}
}
public Boolean isUsedCadastro(String findColumnFK, String findValue) throws Exception {
try {
Criteria criteria = session.createCriteria(persistentClass);
criteria.add(Restrictions.eq(findColumnFK, findValue));
Integer totalResult = (Integer)criteria.setProjection(Projections.rowCount()).uniqueResult();
return totalResult > 0;
} catch (Exception e) {
throw new Exception(e);
}
}
public List<T> findByCriteria(List<Criterion> criterion) throws Exception {
try {
Criteria criteria = session.createCriteria(persistentClass);
if (criterion == null)
return null;
for (Criterion c: criterion)
criteria.add(c);
return criteria.list();
} catch (Exception e) {
throw new Exception(e);
}
}
public List<Object[]> query(String sql) throws Exception {
try {
Query select = session.createQuery(sql);
return select.list();
} catch (Exception e) {
throw new Exception(e);
}
}
public int sqlUpdate(String sql) throws Exception {
try {
int rowCount = 0;
Query query = session.createQuery(sql);
rowCount = query.executeUpdate();
return rowCount;
} catch (Exception e) {
throw new Exception(e);
}
}
private Criteria addOrder(Criteria criteria, String fieldOrder, String ord) {
if (!fieldOrder.isEmpty()) {
if ((ord.toUpperCase().equals("ASC")) || (ord.isEmpty()))
criteria.addOrder(Order.asc(fieldOrder));
if (ord.toUpperCase().equals("DESC"))
criteria.addOrder(Order.desc(fieldOrder));
}
return criteria;
}
//gets e sets
}
ClientesDAO:
package br.com.futurize.persistencia;
import org.hibernate.Session;
import br.com.futurize.dominio.Clientes;
@SuppressWarnings({"rawtypes", "unused"})
public class ClientesDAO extends GenericDAO<Clientes> {
private Session sessionLocal;
private Class persistentClassLocal = Clientes.class;
public ClientesDAO(Session session) {
super(session, Clientes.class);
super.setPrefixo("clf");
super.setPrefixo("clientes");
super.setFieldId("clf_CLIENTE");
super.setFieldNome("clf_nome");
this.sessionLocal = session;
this.persistentClassLocal = super.getPersistentClassLocal();
}
}
Muito obrigado a todos e fiquem com Deus
Ademir - BH