Se não me engano, peguei o GenericDao que utilizo aqui de um site americano… agora não estou lembrado ao certo qual foi.
Coloquei uns metodos que estava precisando também…
[code]package Utilitarios;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import Model.Cliente;
/**
-
@author SAMUEL FACCHINELLO
-
@version 1.0
*/
public class GenericDao {
public static List executeHQLList(String hql){
Session em = HibernateUtil.getSessionFactory().openSession();
Query query = em.createQuery(hql);
List<Object> lista = query.list();
em.clear();
em.close();
return lista;
}
public static List findSpecify(Object classe, String column, Object content) {
Session em = HibernateUtil.getSessionFactory().openSession();
Query query = em.createQuery("Select c from " + classe.getClass().getName() + " c where " + column + " Like '%" + content + "%'");
List<Object> lista = query.list();
em.clear();
em.close();
return lista;
}
public static List findByNamedQuery(Object classe, String namedQuery, String column, Object value) {
Session em = HibernateUtil.getSessionFactory().openSession();
Query query = em.getNamedQuery(namedQuery).setParameter(column, value);
List<Object> lista = query.list();
em.clear();
em.close();
return lista;
}
/**
- Salva ou Atualiza dependendo se j� existe ou n�o o objeto no banco de dados.
-
@param o: Entidade a ser Salva (se ainda n�o existir) ou a ser Atualizada (se j� existir)
-
@return Retorna a Entidade passada como par�metro.
-
@throws Exception
*/
public Object saveOrUpdate(Object o) throws Exception {
System.out.println(“Veio no save or update”);
Session em = HibernateUtil.getSessionFactory().openSession();
Transaction trans = em.beginTransaction();
try {
em.merge(o);
trans.commit();
return o;
} catch (Exception e) {
if (trans.isActive()) {
trans.rollback();
}
e.printStackTrace();
throw e;
} finally {
em.close();
}
}
/**
- Salva ou Atualiza dependendo se j� existe ou n�o o objeto no banco de dados.
-
@param list: lista das Entidades a serem Salvas (se ainda n�o existir) ou a serem Atualizadas (se j� existir)
-
@return Retorna a Entidade passada como par�metro.
-
@throws Exception
*/
public void saveOrUpdateAll(ArrayList list) throws Exception {
Session em = HibernateUtil.getSessionFactory().openSession();
Transaction trans = em.beginTransaction();
try {
trans.begin();
for (Object o : list) {
em.merge(o);
}
trans.commit();
} catch (Exception e) {
if (trans.isActive()) {
trans.rollback();
}
e.printStackTrace();
throw e;
} finally {
em.close();
}
}
/**
- Remove a Entidade do banco de dados.
-
@param o: Entidade a ser removido do banco de dados.
-
@throws Exception
*/
public void remove(Object o) throws Exception {
Session em = HibernateUtil.getSessionFactory().openSession();
Transaction trans = em.beginTransaction();
try {
em.delete(o);
trans.commit();
} catch (Exception e) {
if (trans.isActive()) {
trans.rollback();
}
throw e;
} finally {
em.close();
}
}
/**
- Remove a Entidade do banco de dados.
-
@param list: Lista de Entidades a serem removidas do banco de dados.
-
@throws Exception
*/
public void removeAll(ArrayList list) throws Exception {
Session em = HibernateUtil.getSessionFactory().openSession();
Transaction trans = em.beginTransaction();
try {
trans.begin();
for (Object o : list) {
em.delete(o);
}
trans.commit();
} catch (Exception e) {
if (trans.isActive()) {
trans.rollback();
}
throw e;
} finally {
em.close();
}
}
/**
-
Retorna a lista de itens salvo no banco de dados de acordo com a Entidade passada como par�metro.
-
@param classe : Entidade que dever� buscar no banco de dados.
-
@return List contendo todos os objetos encontrados da entidade passada como par�metro.
*/
public static List findAll(Object classe) {
Session em = HibernateUtil.getSessionFactory().openSession();
Query query = em.createQuery("Select a from " + classe.getClass().getName() + " a");
List<Object> lista = query.list();
em.clear();
em.close();
return lista;
}
/**
- Faz a busca no banco pelo ID da entidade
-
@param classe : Entidade a ser buscada
-
@param id : valor a ser procurado
-
@return Objeto encontrado no banco, caso n�o encontre ser� retornado NULL
-
@throws Exception
*/
@SuppressWarnings(“unchecked”)
public static Object findById(Class classe, Object id) throws Exception {
if (classe == null) {
throw new Exception(“classe n�o pode ser nula.”);
}
if (id == null) {
throw new Exception(“id n�o pode ser nulo.”);
}
Field[] fields = classe.getDeclaredFields();
String chave = “”;
for (Field field : fields) {
if (field.getAnnotation(Id.class) != null) {
chave = field.getName();
break;
}
}
if (chave.equals("")) {
throw new Exception("Annotation @Id n�o encontrada na classe " + classe.getName());
}
Session em = HibernateUtil.getSessionFactory().openSession();
Query query = em.createQuery(“Select a from " + classe.getName() + " a” +
" where a." + chave + " = :id").setParameter(“id”, id);
query.setMaxResults(1);
return query.uniqueResult();
}
/**
- Retorna objeto de acordo com a UniqueConstraint definida na Entidade
-
@param classe : Entidade a ser buscada
-
@param ids : Array contendo os IDS a serem buscados (na mesma ordem em que a UniqueConstraint foi definido)
-
@return Objeto encontrado no banco, caso n�o encontre ser� retornado NULL
-
@throws Exception
*/
@SuppressWarnings(“unchecked”)
public static Object findByUniqueConstraints(Class classe, ArrayList ids) throws Exception {
if (classe == null) {
throw new Exception(“classe n�o pode ser nula.”);
}
if (ids == null || ids.size() == 0) {
throw new Exception(“ids n�o pode ser nulo.”);
}
ArrayList chaves = new ArrayList();
ArrayList tipos = new ArrayList();
Annotation annotation = classe.getAnnotation(Table.class);
if (annotation != null) {
Table table = (Table) annotation;
for (UniqueConstraint uniqueConstraint : table.uniqueConstraints()) {
for (String column : uniqueConstraint.columnNames()) {
tipos.add(classe.getDeclaredField(column).getType());
chaves.add(column);
}
}
} else {
throw new Exception("Annotation @Table n�o encontrada na classe " + classe.getName());
}
if (chaves.size() == 0) {
throw new Exception("UniqueConstraints n�o encontrada na annotation @Table da classe " + classe.getName());
}
if (chaves.size() != ids.size()) {
throw new Exception("O n�mero de par�metros passados n�o confere com o n�mero de UniqueConstraints encontrados na classe " + classe.getName() + “. " + ids.size() + " foram passados, mas " + chaves.size() + " eram esparados.”);
}
String str = “”;
for (int i = 0; i < chaves.size(); i++) {
if (!ids.get(i).getClass().equals(tipos.get(i))) {
throw new Exception(“Tipos de dados incompat�veis. O par�metro n�mero " + i + " � incompat�vel, foi passado:” + ids.get(i).getClass().toString() + " e estava esperando: " + tipos.get(i).toString());
}
if (str.length() == 0) {
str = " where a." + chaves.get(i) + " = " + ids.get(i);
} else {
str += " and " + chaves.get(i) + " = " + ids.get(i);
}
}
Session em = HibernateUtil.getSessionFactory().openSession();
Query query = em.createQuery("Select a from " + classe.getName() + " a " + str);
query.setMaxResults(1);
return query.uniqueResult();
}
}[/code]
Abraços
----------- Editando ------------
Repare como meu ingles é bom, olhe o nome do método findSpecify kkkkkkkkkkkkk… Que vergonha mano!! Pá acaba mesmo hehe