Criteria Java8 - API is deprecated

1 resposta
java
A

Olá pessoal.

Estou usando o Java 8 e Hibernate Core versão 5.3.3. Nas minhas consultas, usando o Criteria, acusa como deprecation, mas mesmo assim ainda consigo realizar as consultas no BD sem problemas, ´so fica aparecendo WARN sobre isso. Minha consulta:

@SuppressWarnings({ deprecation, unchecked })

public List listar() {

SessionFactory factory = new Configuration().configure().buildSessionFactory();

Session sessao = factory.openSession();
try {
		Criteria consulta = sessao.createCriteria(classe);
		List<Entidade> resultado = consulta.list();
		return resultado;
	} catch (RuntimeException erro) {
		throw erro;
	} finally {
		sessao.close();
	}

}

Criei um novo método, onde tenho que realizar uma consulta específica, passando parametros, porém não apresenta as informações no console, somente um WARN:
out 03, 2018 3:41:00 PM org.hibernate.internal.SessionImpl createCriteria
WARN: HHH90000022: Hibernate’s legacy org.hibernate.Criteria API is deprecated; use the JPA javax.persistence.criteria.CriteriaQuery instead

Minha consulta:
package br.com.teste.dao;

import org.apache.shiro.crypto.hash.SimpleHash;

import org.hibernate.Criteria;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.cfg.Configuration;

import org.hibernate.criterion.Restrictions;

import br.com.teste.domain.Usuario;

public class UsuarioDAO extends GenericDAO{

public Usuario autenticar(String cpf, String senha) {
	
	SessionFactory factory = new Configuration().configure().buildSessionFactory();
	Session session = factory.openSession();

	try {
	
		@SuppressWarnings("deprecation")
		Criteria consulta = session.createCriteria(Usuario.class);
		consulta.createAlias("usuario", "p");
		consulta.add(Restrictions.eqOrIsNull("p.cpf", cpf));
		
		SimpleHash hash = new SimpleHash("md5",senha);
		consulta.add(Restrictions.eq("senha", hash.toHex()));
		
		Usuario resultado = (Usuario) consulta.uniqueResult();
		return resultado;

	} catch (RuntimeException erro) {
		throw erro;
	} finally {
		session.close();
	}
}

}

Como usar o List sem o Criteria e como corrigir o problema da mensagem: out 03, 2018 3:41:00 PM org.hibernate.internal.SessionImpl createCriteria
WARN: HHH90000022: Hibernate’s legacy org.hibernate.Criteria API is deprecated; use the JPA javax.persistence.criteria.CriteriaQuery instead

1 Resposta

S

Como a mensagem sugere, ao invés de utilizar org.hibernate.Criteria, utilize javax.persistence.criteria.CriteriaQuery:

CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Usuario> consulta = builder.createQuery(Usuario.class);
Criado 3 de outubro de 2018
Ultima resposta 3 de out. de 2018
Respostas 1
Participantes 2