No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Invierte en tu educación con el precio especial

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

12 Días
15 Hrs
39 Min
8 Seg

Usar la anotación @Query con JPQL

17/25
Recursos

Aportes 6

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Solo un pequeño aporte, hasta este punto siempre hemos usado

return ResponseEntity.ok(this.customerService.findByPhone(phone));

Bajo estos ejemplos esta “bien” pero en un ambiente productivo en donde lo mas seguro es que vayas a escribir validaciones, no queremos llamar a la base de datos tantas veces como validaciones tengamos. Lo recomendado es:

CustomerEntity customer = this.customerService.findByPhone(phone)
return ResponseEntity.ok(customer)

De esta forma solo hacemos un llamado a la base de datos y podemos hacer cuantas validaciones queramos sin afectar el rendimiento de nuestra app

Si alguno esta teniendo algun error con la consulta al momento de consumir el servicio de getByPhone con alguna otra herramienta, tengan en cuenta que en el request deben representar los espacios en el numero de telefono con el caracter especial “%20” que representa un espacio, quedando la consulta de esta forma:

GET http://localhost:8080/api/customers/phone/(826)%20607-2278

Es buena practica terminar el nombre del metodo con el tipo de sentencia si es SQL O JPQL, y @Query(), admite otro parametro nativeQuery que recibe un valor boolean, para indicarle si es true estamos usando SQL y false PQL

@Query(nativeQuery = false,
			value = "SELECT e "
					+ "FROM EmployeeEntity e, DepartmentEntity d, JobEntity j, LocationEntity l, CountryEntity c, RegionEntity r "
					+ "WHERE e.jobEntity.jobId = j.jobId "
					+ "AND e.depEntity.departmentId = d.departmentId "
					+ "AND d.locationEntity.locationId = l.locationId "
					+ "AND l.countryEntity.id = c.id "
					+ "AND c.region.id = r.id "
					+ "AND e.salary > :salary "
					+ "AND e.commissionPct IS NOT NULL "
					+ "ORDER BY salary ASC ")
	
	public List<EmployeeEntity> searchInTablesJpql(@Param("salary")Double salary);
Listo ✅

Si solo quiero proyectar algunas columnas de mi tabla con JPQL una manera es creando un constructor en el entity, con solo los atributos que quiera proyectar, y en el query en la parte donde se especifica las columnas crear una instancia del constructor de la clase


	@Query(nativeQuery = false,
			value = "SELECT new ParamEntity(p.id, p.name, p.value) "
					+ "FROM ParamEntity p "
					+ "WHERE p.parentId = (SELECT parent.id FROM ParamEntity parent where parent.name = :name ) "
					+ "AND p.status = :status "
					+ "ORDER BY p.name ASC ")
	public List<ParamEntity> findChildsOfParentId(@Param("name") String id, @Param("status") Integer status);
public ParamEntity(Integer id, String name, String value) {
		this.id = id;
		this.name = name;
		this.value = value;
	}