Criar uma consulta genérica com JPA

Pessoal, preciso criar UMA telinha de consulta para várias tabelas…

qual seria a melhor maneira? (quero usar JPA)…

a idéia é abrir a consulta, passando o pojo.class, ele já identificar qual a tabela a ser carregada… e retornar o item pesquisado

alguém ja fez?

[quote=MrDataFlex]Pessoal, preciso criar UMA telinha de consulta para várias tabelas…

qual seria a melhor maneira? (quero usar JPA)…

a idéia é abrir a consulta, passando o pojo.class, ele já identificar qual a tabela a ser carregada… e retornar o item pesquisado

alguém ja fez?[/quote]

Um DAO Genérico +/- igual esse?

[code]public class DAO {
// T = Type ou seja tipo
private Session session;

private Logger logger = Logger.getLogger(DAO.class);

// criado p/ pegar a classe q vai no método load e generics q nao permite
// chamar atributos e metodos
private Class classe;

public DAO(Session session, Class classe) {
	this.session = session;
	this.classe = classe;
}


@SuppressWarnings("unchecked")
public void save(T t) {
	logger.info("salvando " + t);
	session.saveOrUpdate(t);
}

@SuppressWarnings("unchecked")
public T load(Long id) {
	logger.info("lendo " + classe + " id: "+id);
	return (T) session.load(classe, id);
}

@SuppressWarnings("unchecked")
public void salveOuAtualiza(T t) {
	session.saveOrUpdate(t);
}

public void deleta(T t) {
	logger.info("deletando " + t);
	session.delete(t);
}

@SuppressWarnings("unchecked")
public List<T> list() {
	// Critéria API
	Criteria criteria = getSession().createCriteria(classe);
	criteria.addOrder(Order.asc("nome"));
	return criteria.list();
}

// Criado p/ as outras classes conseguirem ver
public Session getSession() {
return session;
}

public void setSession(Session session) {
	this.session = session;
}


@SuppressWarnings("unchecked")
public List<String> buscaNome(String buscaNome){
	Criteria criteria = session.createCriteria(Dados.class);
	criteria.add(Restrictions.ilike("nome", buscaNome + "%"));
	criteria.addOrder(Order.asc("nome"));
	criteria.setProjection(Projections.property("nome"));
	return criteria.list();


}

}
[/code]

Nao ta tão genérico pq brinquei bastante, mas tem mta coisa genérica aí nessa classe :smiley: