Hibernate createCriteria deprecated, como atualizar?
9 respostas
hibernate
M
Marcel_Motta
No console aparece:
org.hibernate.Criteria API is deprecated; use the JPA javax.persistence.criteria.CriteriaQuery instead
Ele funciona, salva apaga, lista, deleta, busca, mas o createCriteria aparece deprecated com o risco.
meu genericDAO completo:
packagecom.mmotta.drogaria2.dao;importorg.hibernate.Criteria;importorg.hibernate.Session;importorg.hibernate.Transaction;importorg.hibernate.criterion.Restrictions;importjavax.persistence.criteria.CriteriaQuery;importjava.lang.reflect.ParameterizedType;importjava.util.List;importcom.mmotta.drogaria2.util.HibernateUtil;publicclassGenericDAOnew<Entidade>{privateClass<Entidade>classe;@SuppressWarnings("unchecked")publicGenericDAOnew(){// APIreflection, usado para fazer os métodos listar genéricosthis.classe=(Class<Entidade>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];}publicvoidsalvar(Entidadeentidade){// capturando sessao abertaSessionsessao=HibernateUtil.getFabricaDeSessoes().openSession();Transactiontransacao=null;try{transacao=sessao.beginTransaction();sessao.save(entidade);transacao.commit();//confirmando transacao}catch(RuntimeExceptione){if(transacao!=null){transacao.rollback();// }throwe;}finally{sessao.close();}}@SuppressWarnings("unchecked")publicList<Entidade>listar(){// capturando sessao abertaSessionsessao=HibernateUtil.getFabricaDeSessoes().openSession();try{Criteriaconsulta=sessao.createCriteria(classe);List<Entidade>resultado=consulta.list();returnresultado;}catch(RuntimeExceptione){throwe;}finally{sessao.close();}}@SuppressWarnings("unchecked")publicEntidadebuscar(Longcodigo){// capturando sessao abertaSessionsessao=HibernateUtil.getFabricaDeSessoes().openSession();try{Criteriaconsulta=sessao.createCriteria(classe);// adicionando restricao como o where do sqlconsulta.add(Restrictions.idEq(codigo));Entidaderesultado=(Entidade)consulta.uniqueResult();returnresultado;}catch(RuntimeExceptione){throwe;}finally{sessao.close();}}publicvoidexcluir(Entidadeentidade){// capturando sessao abertaSessionsessao=HibernateUtil.getFabricaDeSessoes().openSession();Transactiontransacao=null;try{transacao=sessao.beginTransaction();sessao.delete(entidade);transacao.commit();//confirmando transacao}catch(RuntimeExceptione){if(transacao!=null){transacao.rollback();// }throwe;}finally{sessao.close();}}publicvoideditar(Entidadeentidade){// capturando sessao abertaSessionsessao=HibernateUtil.getFabricaDeSessoes().openSession();Transactiontransacao=null;try{transacao=sessao.beginTransaction();sessao.update(entidade);transacao.commit();//confirmando transacao}catch(RuntimeExceptione){if(transacao!=null){transacao.rollback();// }throwe;}finally{sessao.close();}}}
Mas recomendo migrar pra JdbcTemplate que é mais leve e sem essas confusões de linguagem intermediária OO pra queries. Se ainda assim quiser algo pra JPA/Hibernate, o menos pior é o Spring Data:
M
Marcel_Motta
pior que é verdade e os comandos mudam muito a cada versão
javaflex1 like
Sempre achei Criteria uma solução extremamente bizarra. Prefiro escrever SQL diretamente sem modelo OO, mas pra quem gosta de queries em cima de modelo OO, embora seja engessado, HQL/JPQL é mais legível por ser mais próximo a SQL.