Uso de la clase Criteria en Hibernate

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.

Se utiliza para hacer consultas

Métodos de la clase Criteria

Session session = HibernateUtil.getSessionFactory().openSession();
		
CriteriaBuilder cb = session.getCriteriaBuilder();
CriteriaQuery<Autor> cq = cb.createQuery(Autor.class);
Root<Autor> autorRoot = cq.from(Autor.class);
cq.select(autorRoot).where(cb.equal(a.get("nombre"), "Juan"));
TypedQuery<Autor> q=session.createQuery(cq);
				
//List<Autor> list = q.getResultList();
Autor cicloResultado = q.getSingleResult();

Ejemplos de where:

Nota: Utilizando Criteria no es necesario hacer commit(), ya que la llamada a este método es para materializar cambios en la base de datos.

.where(cb.eq(cb.length(libroRoot.get("titulo")), 6));
.where(cb.or(cb.gt(libroRoot.get("edad"), 18), cb.eq(libroRoot.get("status"), "con permiso paterno")));
.where(cb.like(libroRoot.<String>get("titulo"), "%titulo1%"));

Order By:

criteria.orderBy(cb.asc(libroRoot.get("titulo")), cb.asc(libroRoot.get("precio")));

Ejercicio 5 libros

Insertar 5 libros en la base de datos. Dos registros deben tener el mismo título (»titulo1»).

Utilizar la clase criteria para mostrar los libros cuyo título contenga la palabra »titulo1». Así es como ejecutaremos una sentencia de tipo like:

Hacer una nueva consulta, ordenando la salida por el título, e ir recorriéndola imprimiendo los títulos y las id con System.out.println();

ID:1 Título:titulo1
ID:5 Título:titulo1
ID:6 Título:titulo2
ID:2 Título:titulo3
ID:4 Título:titulo4
ID:3 Título:titulo5

Obtener datos de dos tablas relacionadas

CriteriaBuilder cb = session.getCriteriaBuilder(); // Este es el objeto al que le pasaré los where de la

CriteriaQuery<Autor> cq = cb.createQuery(Autor.class);

Root<Autor> a = cq.from(Autor.class);
cq.select(a);
		
Autor autor2 = session.createQuery(cq).getSingleResult();
		
List<Libro> libros2 = autor2.getLibros();
		
for(Libro l : libros2) {
	System.out.println(l.getTitulo());
}

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.