Criar uma consulta genérica com JPA

1 resposta
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?

1 Resposta

Eduardo_Bregaida
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?

Um DAO Genérico +/- igual esse?

public class DAO<T> {
	// T = Type ou seja tipo
	private Session session;

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

	// criado p/ pegar a classe q vai no ©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();


	}
}

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

Criado 21 de agosto de 2007
Ultima resposta 21 de ago. de 2007
Respostas 1
Participantes 2