query criteriabuilder java hibernate

java - criteriabuilder - Método obsoleto createCriteria en Hibernate 5



hibernate 5 select where (4)

Esta llamada está en desuso:

session.createCriteria(Bus.class).list();

En los archivos de origen puedo ver esto:

/** @deprecated */ @Deprecated Criteria createCriteria(Class var1); /** @deprecated */ @Deprecated Criteria createCriteria(Class var1, String var2); /** @deprecated */ @Deprecated Criteria createCriteria(String var1); /** @deprecated */ @Deprecated Criteria createCriteria(String var1, String var2);

Pero no puedo entender qué método tengo que usar en lugar de createCriteria .


Agregar respuesta a partir de marzo de 2018.

Dependencias:

import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.boot.MetadataSources; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.service.ServiceRegistry; import javax.persistence.criteria.CriteriaQuery; import java.util.List; public static List<Contact> fecthAllContacts() { Session session = sessionFactory.openSession(); // create Criteria CriteriaQuery<Contact> criteriaQuery = session.getCriteriaBuilder().createQuery(Contact.class); criteriaQuery.from(Contact.class); List<Contact> contacts = session.createQuery(criteriaQuery).getResultList(); session.close(); return contacts; }

mientras que sessionFactory es:

public static SessionFactory buildSessionFactory() { final ServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build(); return new MetadataSources(registry).buildMetadata().buildSessionFactory(); }


En su lugar, puede utilizar las siguientes interfaces en Hibernate 5.2 +:

javax.persistence.criteria.CriteriaBuilder javax.persistence.criteria.CriteriaQuery // Create CriteriaBuilder CriteriaBuilder builder = session.getCriteriaBuilder(); // Create CriteriaQuery CriteriaQuery<YourClass> criteria = builder.createQuery(YourClass.class);


Tenía el siguiente método, cambié los nombres de los objetos por razones de seguridad:

public List<MyObject> listAllForIds(List<Long> ids) { Criteria criteria = getSessionFactory().getCurrentSession().createCriteria(MyObject.class) .createAlias("joinObject", "joinObject") .add(Restrictions.not(Restrictions.like("name", "string1", MatchMode.END))) .add(Restrictions.not(Restrictions.like("name", "string2", MatchMode.END))) .add(Restrictions.in("joinObject.id", ids)); return criteria.list(); }

Cambiando eso para usar:

javax.persistence.criteria.CriteriaBuilder javax.persistence.criteria.CriteriaQuery

La consulta tiene el siguiente aspecto:

public List<MyObject> listAllForIds(List<Long> ids) { CriteriaBuilder builder = getSessionFactory().getCurrentSession().getCriteriaBuilder(); CriteriaQuery<MyObject> criteria = builder.createQuery(MyObject.class); Root<MyObject> myObjectRoot = criteria.from(MyObject.class); Join<MyObject, JoinObject> joinObject = myObjectRoot.join("joinObject"); Predicate likeRestriction = builder.and( builder.notLike( myObjectRoot.get("name"), "%string1"), builder.notLike( myObjectRoot.get("name"), "%string2") ); criteria.select(myObjectRoot).where(joinObject.get("id").in(ids), likeRestriction); TypedQuery<MyObject> query = getSessionFactory().getCurrentSession().createQuery(criteria); return query.getResultList(); }

Espero que ayude a alguien más, no dude en sugerir cualquier cambio para mejorar el código.


de la documentación de la API:

@ Criterios reducidos createCriteria (Class persistentClass) En desuso. (desde 5.2) para la sesión, use la instancia Crear criterios de JPA para la clase dada (entidad o subclases / implementadores). Parámetros: persistentClass - La clase, que es una entidad, o tiene subclases / implementadores de entidad Devuelve: La instancia de criterios para manipulación y ejecución

Entonces dice brevemente a ...

utilizar los criterios JPA Crear criterios