Olá amigos do GUJ.
Estou tentando fazer uma integração Spring com Hibernate, para isso estou usando a HibernateDaoSupport, mas li em um post que a Spring desencora o uso da mesma, alguém saberia me dizer porque? e qual seria a alternativa?
Aproveitando essa oportunidade, estou com o seguinte problema na hora de compor minha estrutura:
Uso a Classe Generica abaixo:
public class HibernateGenericDAO<T, ID extends Serializable> extends HibernateDaoSupport implements IGenericDAO<T, ID> {
private static Log LOG = LogFactory.getLog(HibernateGenericDAO.class);
private Class<T> persistentClass;
@SuppressWarnings("unchecked")
public HibernateGenericDAO() {
this.setPersistentClass((Class<T>) ((ParameterizedType) getClass()
.getGenericSuperclass()).getActualTypeArguments()[0]);
this.getSessionFactory();
}
@Override
public T saveOrUpdate(T entity) {
try {
this.getHibernateTemplate().save(entity);
return entity;
} catch (final HibernateException ex) {
HibernateGenericDAO.LOG.error(ex);
throw convertHibernateAccessException(ex);
}
}
@Override
public void delete(T entity) {
try{
this.getHibernateTemplate().delete(entity);
}catch(final HibernateException ex){
HibernateGenericDAO.LOG.error(ex);
throw convertHibernateAccessException(ex);
}
}
@Override
public List<T> listAll() {
try {
return this.getHibernateTemplate().loadAll(getPersistentClass());
} catch (final HibernateException ex) {
HibernateGenericDAO.LOG.error(ex);
throw convertHibernateAccessException(ex);
}
}
@Override
public T getById(ID id) {
try{
return (T) this.getHibernateTemplate().get(getPersistentClass(), id);
}catch(final HibernateException ex){
HibernateGenericDAO.LOG.error(ex);
throw convertHibernateAccessException(ex);
}
}
public Class<T> getPersistentClass() {
return this.persistentClass;
}
public void setPersistentClass(Class<T> persistentClass) {
this.persistentClass = persistentClass;
}
@SuppressWarnings("unchecked")
protected List<T> findByCriteria(Criterion... criterion) {
try {
Criteria crit = this.getHibernateTemplate()
.getSessionFactory()
.getCurrentSession()
.createCriteria(getPersistentClass());
for (Criterion c : criterion) {
crit.add(c);
}
return crit.list();
} catch (final HibernateException ex) {
HibernateGenericDAO.LOG.error(ex);
throw convertHibernateAccessException(ex);
}
}
}
Mas meu principal problema está na classe mais especializada:
@Repository("enderecoDAO")
public class EnderecoDAO extends HibernateGenericDAO<Endereco, Integer> implements IEnderecoDAO{
@Autowired
public EnderecoDAO(SessionFactory sessionFactory){
super(Endereco.class);
setSessionFactory(sessionFactory);
}
@Override
public List<Endereco> findWithLogradouro() {
return findByCriteria(Restrictions.isNotNull("telefone"), Restrictions.ne("telefone", ""));
}
}
Veja que minha classe mãe recebe um ( Class, Integer).
Como eu posso fazer pra chamar o construtor da minha classe mãe passando esses dois paramentros?
Obrigado a todos