Obter o nome da classe a partir de generics

1 resposta
bosnic

Galera,
estou reescrevendo uma aplicação minha feita em Java e neste momento estou com uma dúvida na implementação de DAO. O que preciso basicamente é obter o nome da classe a partir de generics. Já tenho a solução, porém gostaria de saber se não há alguma outra forma (melhor) de resolver o mesmo problema. Observem o código a seguir:

package com.neosoft.neoproject.dao.jpa;

import java.lang.reflect.ParameterizedType;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import com.neosoft.neoproject.dao.GenericDao;
import com.neosoft.neoproject.exception.dao.DaoCreateException;
import com.neosoft.neoproject.exception.dao.DaoDeleteException;
import com.neosoft.neoproject.exception.dao.DaoFindException;
import com.neosoft.neoproject.exception.dao.DaoUpdateException;

public class AbstractDaoJpa<Model> implements GenericDao<Model> {

	@PersistenceContext
	public EntityManager entityManager;

	@Override
	public void create(Model model) throws DaoCreateException {
		entityManager.persist(model);
	}

	@Override
	public void delete(Model model) throws DaoDeleteException {
		entityManager.remove(model);
	}

	@Override
	public void update(Model model) throws DaoUpdateException {
		entityManager.merge(model);
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Model> findAll() throws DaoFindException {
		return entityManager.createQuery("select o from " + getDaoClass().getSimpleName() + " o").getResultList();
	}

	@Override
	public List<Model> findAllByFieldValue(String field, String fieldValue) throws DaoFindException {
		return null;
	}

	@Override
	public Model findByFieldValue(String field, String fieldValue) throws DaoFindException {
		return null;
	}

	@Override
	public void findById(Long id) throws DaoFindException {

	}

	@SuppressWarnings("unchecked")
	private Class<Model> getDaoClass() {
		final ParameterizedType parameterizedType = (ParameterizedType) this.getClass().getGenericSuperclass();
		return (Class<Model>) parameterizedType.getActualTypeArguments()[0];
	}

}

O método getDaoClasse é usado no método findAll para revelar o nome da classe em questão. Existe alguma outra forma “mais correta” de fazer isso?

1 Resposta

Mauricio_Linhares

Você já testou isso pra ver se funciona?

Criado 13 de fevereiro de 2009
Ultima resposta 14 de fev. de 2009
Respostas 1
Participantes 2