Olá Galera,
estou com uma dúvida básica de reflexão…
Quero fazer o seguinte:
AbstractCtrl<T> que será especializado conforme seu tipo. Dentro desse AbstractCtrl<T> terá instanciado um GenericDao<T>.
Porém para funcionar perfeitamente eu preciso saber qual a Classe desse T quando preciso listar no hibernate.
Apenas para refrescar, o hibernate utiliza o seguinte:
sessaoHibernate.createCriteria(classe de T).list();
Alguém tem uma idéia de como posso fazer isso?
Obrigado.
Não entendo de Hibernate, mas para saber qual class você está utilizando você pode utilizar:
T.class - retorna um class
ou
T.class.getName() - retorna uma Strings
Veja qual o ideal para a situação que você quer e boa sorte.
[quote=evandro.santos]Não entendo de Hibernate, mas para saber qual class você está utilizando você pode utilizar:
T.class - retorna um class
ou
T.class.getName() - retorna uma Strings
Veja qual o ideal para a situação que você quer e boa sorte.[/quote]
Olá.
Essa foi a primeira solução testada por mim, mas não é possível.
Apresenta o seguinte erro:
[quote]Exception in thread “main” java.lang.Error: Unresolved compilation problem:
Illegal class literal for the type parameter T[/quote]
Através de pesquisas na internet cheguei ao seguinte código:
[code]public class GenericDAO {
protected Class<T> classe;
public GenericDAO(){
ParameterizedType paramType = (ParameterizedType) (getClass().getGenericInterfaces()[0]);
this.classe = (Class<T>) (paramType.getActualTypeArguments()[0].getClass());
}
}[/code]
Mas a classe retornada é sempre a mesma:
Obrigado.
[code]public class GenericDAO<T> {
protected Class<T> classe;
public GenericDAO(){
ParameterizedType paramType = (ParameterizedType) (getClass().getGenericInterfaces()[0]);
this.classe = (Class<T>) (paramType.getActualTypeArguments()[0].getClass());
}
}[/code]
Para funcinar um ParameterizedType vc tera que criar um classe que estende dessa classe…
public class EmpresaDAO extends GenericAbstractDAO<Empresa>
Assim vai funcionar…
Se conseguir de outro jeito me fala…