Versiones comparadas

Clave

  • Se ha añadido esta línea.
  • Se ha eliminado esta línea.
  • El formato se ha cambiado.

...

Bloque de código
languagejava
public interface Specification<T> {
  Predicate toPredicate(Root<T> root, CriteriaQuery query, CriteriaBuilder cb);
}

Para implementar Por tener nuestro proyecto organizado, podemos hacernos una clase Java para implementar nuestros métodos que devuelvan objetos Specificacion. Estos métodos tendrán que implementar toPredicate, la forma más sencilla sería la siguiente:

...

En este ejemplo, se devuelve un Predicate en el que se devuelven Comunicaciones filtrando por título, autor y/o componentes. Se va elaborando el predicado, con sus condiciones, utilizando la instancia de CriteriaBuilder. Query hace referencia a la query actual, y se pueden sacar subqueries, por ejemplo, para añadir condiciones a los elementos obtenidos por la query padre. Con root estamos accediendo a los datos, a los objetos Comunicación. Vemos que hace referencia a las clases seguidas de un guión bajo, seguido de la propiedad en mayúsculas. Estas clases es lo que se llama metamodelo, y no es necesario implementarlas a mano, se pueden generar automáticamente teniendo esta Para información más detallada, podemos consultar la documentación oficial de Spring. Métodos como este los podemos indicar como parámetro de findAll en el JpaRepository correspondiente:

Bloque de código
languagejs
comunicacionRepository.findAll(metodo());

En la implementación del método podemos ver referencias a clases seguidas de un guión bajo, estas son las clases del metamodelo, vamos a ver cómo generarlas.

Generar clases del metamodelo

Podemos generar automáticamente estas clases, incluyendo esta dependencia en nuestro pom.xml:

Bloque de código
languagexml
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-jpamodelgen</artifactId>
    <scope>provided</scope>
</dependency>

Para información más detallada, podemos consultar la documentación oficial de SpringUna vez tengamos esto, tendremos que ejecutar maven install, y las clases se generarán en target/generated-sources/annotations/es/um/.../entities/, dentro de nuestro proyecto. Podemos mover las clases que necesitemos a nuestra estructura de paquetes para tenerlas organizadas junto al resto de clases del proyecto, o también podemos añadir esta carpeta al build path.

Llamadas a métodos de base de datos

...