Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Uso de JPQL con named parameters

24/31
Recursos

Aportes 11

Preguntas 4

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Si estás viendo Spring y no te gustó Java ni Spring, y por ejemplo, trabajas con JS? considera que Nest.js o Angular es muy similar a Spring. No te podrás escapar fácilmente de los decorators 😛

Para los que tengan dudas de para que sirve una clase DTO (Data Transfer Object) les dejo el siguiente link donde se explica de manera detallada su uso.
https://www.oscarblancarteblog.com/2018/11/30/data-transfer-object-dto-patron-diseno/

El nombre de esta clase en el menú dice “Uso de Query Methods con named parameters”, y en la clase dice “Uso de JPQL con named parameters”, no comprendo porque realizar un Query Method con una sentencia JPQL, en el otro curso de Spring indican que los queries con JPQL se realizan cuando son queries complejos, comprendo que es un ejemplo; pero me confunde este ejemplo o el título de esta clase. Será que en lugar de Query Method es el nombre del método que se quiere implementar utilizando JPQL, para el caso se le puede nombrar al método como GetAllByEmailAndBirthdate, ya que como Query Method este se llamaría FindAllByEmailAndBirthdate

A mi me marco un erro en en el constructor al usar JPQL. Resulta que UserDto deberia usar private LocalDate birthdate; en lugar de una String. Al cambiarlo asi, ya me funciona correctamente.

Los DTO en su escencia no deberian tener Contructores, solo Getters y Setters

Cuando se está haciendo la sentencia JPQL hay que tener cuidado con los espacios en cada nueva linéa, por qué luego concatena el string y aparecería cómo una sola palabra

El método que se declaro dentro del repository es:

Optional<UserDto> getAllByBirthDateAndEmail…

El tipo de dato que retorno a un Optional de tipo <UserDto>

Revisando la sentencia SQL, esta sentencia dice, regresa todos los Usuario con birthDate y email tal, en ningún lado dice que solo retorne un registro.

Creo que sería mejor cambiar el tipo de dato a retornar por List

List<UserDto> getAllByBirthDateAndEmail…

Muchas gracias Michael por el curso, me sirvió mucho para poder arrancar mi primer proyecto: )

Named parameters
Son parámetros que se envían a nivel de sentencias, estos parámetros serán inicializados dentro los parámetros del método, representándolos por medio de la anotación @Param.

Cuidado con la indentación en el @Query(… les puede salir error si la tienen mal

Pueden construir el DTO con Lombok asi:

@Data
@AllArgsConstructor
public class UserDto {
    
    private Long id;
    private String name;
    private LocalDate birthDate;
    
}

Una obviedad que sino están atentos, no es tan obvia, siempre siempre siempre, fíjense que las propiedades de su entity hagan match con las de sus DTO y Repository, SIEMPRE.