Descripción
Este reto requerirá el uso de cláusulas más complejas de JPQL como JOIN
, GROUP BY
y HAVING
, así como el uso de subconsultas.
Se te ha encargado desarrollar consultas avanzadas para un sistema de gestión de pedidos que involucra clientes, pedidos y productos. Existen tres entidades principales en la base de datos: Cliente
, Pedido
y Producto
.
Cliente
:
id
: Long (Identificador único para cada cliente)nombre
: String (Nombre del cliente)email
: String (Email del cliente)
Pedido
:
id
: Long (Identificador único para cada pedido)fecha
: LocalDate (Fecha en que se realizó el pedido)cliente
: Cliente (El cliente que realizó el pedido, relación muchos a uno)productos
: List<Producto> (Los productos incluidos en este pedido, relación muchos a muchos)
Producto
:
Guarda tu progreso
Inicia sesión para no perder tu progreso y accede a miles de tutoriales, ejercicios prácticos y nuestro asistente de IA.
Más de 25.000 desarrolladores ya confían en CertiDevs
id
: Long (Identificador único para cada producto)nombre
: String (Nombre del producto)precio
: Double (Precio del producto)pedidos
: List<Pedido> (Los pedidos que incluyen este producto, relación muchos a muchos)
Crea un archivo llamado GestionPedidosConsultas.java
que realice las siguientes consultas utilizando JPQL y un EntityManager
:
- Calcular el total gastado en pedidos por cada cliente, ordenados de mayor a menor gasto. Puedes utilizar la función de agregación
SUM
para sumar los precios de los productos. - Encontrar los productos más populares (más incluidos en pedidos), mostrando el nombre del producto y la cantidad de veces que ha sido pedido, pero solo para aquellos productos que han sido pedidos más de 10 veces. Para contar pedidos, puedes usar
COUNT
y contar instancias de un id de un pedido, por ejemploCOUNT(p.id)
. - Obtener una lista de clientes que no han realizado pedidos después de una fecha específica. Para ello puedes usar una subconsulta con
NOT IN
. Dentro de la subconsulta, podrías usarSELECT DISTINCT
para elegir clientes sin duplicados.
Asumir que el EntityManager
ya está configurado para llamar a entityManager.createQuery
directamente.
Como base, puedes utilizar:
import jakarta.persistence.EntityManager;
import jakarta.persistence.TypedQuery;
import java.time.LocalDate;
import java.util.List;
public class GestionPedidosConsultas {
private EntityManager entityManager;
public GestionPedidosConsultas(EntityManager entityManager) {
this.entityManager = entityManager;
}
// Consulta 1: Calcular el total gastado en pedidos por cada cliente
public List<Object[]> calcularTotalGastadoPorClientes() {
}
// Consulta 2: Encontrar los productos más populares
public List<Object[]> encontrarProductosPopulares() {
}
// Consulta 3: Obtener lista de clientes que no han realizado pedidos después de una fecha específica
public List<Cliente> encontrarClientesSinPedidosDespuesDe(LocalDate fecha) {
}
}
Solución al ejercicio de programación en Hibernate
¡Desbloquea la solución completa!
Completa el ejercicio de programación en Hibernate para acceder a la solución paso a paso, explicaciones detalladas y mejores prácticas.
Practica con ejercicios de programación en Hibernate
Mejora tus habilidades con cientos de ejercicios de práctica, recibe retroalimentación instantánea y obtén tu certificación cuando estés listo.
Asistente de IA
Aprende de tus errores
Progreso
Mide tu avance
Certificación
Valida tus habilidades
Únete a miles de desarrolladores mejorando sus habilidades en Hibernate