4
respuestas

[Duda] Error en Console de IDE

Buenas noches a todos!

He realizado la actividad pero me aparecen errores en la consola de IDE Eclipse, y en la base de datos H2 solo me aparecen las tablas "CATEGORIAS" y "PRODUCTO", todas las demás no (CLIENTRES, ITEMS_PEDIDO, PEDIDOS, PRODUCTOS).

Les comparto ss y los códigos que utilicé, he estado batallado un poco con este curso y quiero entenderlo bien pero sin tomar más tiempo del que he utilizado, por las fechas próximas.

Saludos!

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidadIngrese aquí la descripción de esta imagen para ayudar con la accesibilidad Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidadIngrese aquí la descripción de esta imagen para ayudar con la accesibilidad Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
    xmlns="http://xmlns.jcp.org/xml/ns/persistence"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
    <persistence-unit name="tienda" transaction-type="RESOURCE_LOCAL">
        <properties>
            <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:h2:C:\Users\Public\Alura\jpa\database2"/>
            <property name="javax.persistence.jdbc.user" value="sa"/>
            <property name="javax.persistence.jdbc.password" value="1234 "/>
            
            <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
            <property name="hibernate.hbm2ddl.auto" value="create"/>
    
        </properties>
    </persistence-unit>
</persistence>
package com.latam.alura.tienda.modelo;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name="pedidos")
public class Pedido {
    
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    private LocalDate fecha=LocalDate.now();
    private BigDecimal valorTotal=new BigDecimal(0);
    
    @ManyToOne
    private Cliente cliente;
    
    @OneToMany(mappedBy="pedido", cascade=CascadeType.ALL)                                                                                                                                                         
    private List<ItemsPedido> items=new ArrayList<>();

    public Pedido(Cliente cliente) {
        this.cliente = cliente;
    }
    
    public Pedido() {}
    
    public void agregarItems(ItemsPedido item) {
        item.setPedido(this);
        this.items.add(item);
        this.valorTotal= this.valorTotal.add(item.getValor());
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public LocalDate getFecha() {
        return fecha;
    }

    public void setFecha(LocalDate fecha) {
        this.fecha = fecha;
    }

    public BigDecimal getValorTotal() {
        return valorTotal;
    }

    public void setValorTotal(BigDecimal valorTotal) {
        this.valorTotal = valorTotal;
    }

    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

}
4 respuestas
package com.latam.alura.tienda.modelo;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="clientes")
public class Cliente {
    
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    private String nombre;
    private String dni;
    
    public Cliente() {}
    
    public Cliente(String nombre, String dni) {
        super();
        this.nombre = nombre;
        this.dni = dni;
    }

    public Long getId() {
        return id;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getDni() {
        return dni;
    }

    public void setDni(String dni) {
        this.dni = dni;
    }

}
package com.latam.alura.tienda.modelo;

import java.math.BigDecimal;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name="items_pedido")
public class ItemsPedido {
    
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    
    private int cantidad;
    private BigDecimal precioUnitario;
    
    @ManyToOne
    private Producto producto;
    
    @ManyToOne
    private Pedido pedido;

    public ItemsPedido() {
        
    }
    
    public ItemsPedido(int cantidad, Producto producto, Pedido pedido) {
        this.cantidad = cantidad;
        this.producto = producto;
        this.pedido = pedido;
        this.precioUnitario=producto.getPrecio();
    }

    public Long getId() {
        return id;
    }

    public int getCantidad() {
        return cantidad;
    }

    public void setCantidad(int cantidad) {
        this.cantidad = cantidad;
    }

    public BigDecimal getPrecioUnitario() {
        return precioUnitario;
    }

    public void setPrecioUnitario(BigDecimal precioUnitario) {
        this.precioUnitario = precioUnitario;
    }

    public Producto getProducto() {
        return producto;
    }

    public void setProducto(Producto producto) {
        this.producto = producto;
    }

    public Pedido getPedido() {
        return pedido;
    }

    public void setPedido(Pedido pedido) {
        this.pedido = pedido;
    }

    public BigDecimal getValor() {
        return this.precioUnitario.multiply(new BigDecimal(this.cantidad));
    }
    
    
    
}
package com.latam.alura.tienda.dao;

import java.math.BigDecimal;
import java.util.List;

import javax.persistence.EntityManager;

import com.latam.alura.tienda.modelo.Categoria;
import com.latam.alura.tienda.modelo.Pedido;

public class PedidoDao {
    
    private EntityManager em;

    public PedidoDao(EntityManager em) {
        this.em = em;
    }
    
    public void guardar(Pedido Pedido) {
        this.em.persist(Pedido);
    }
    
    
    public void actualizar(Pedido Pedido) {
        this.em.merge(Pedido);
    }
    
    public void remover(Pedido Pedido) {
        Pedido=this.em.merge(Pedido);
        this.em.remove(Pedido);
    }
    
    public Pedido consultaPorId(Long id) {
        return em.find(Pedido.class, id);
    }
    
    public List<Pedido> consultarTodos(){
        String jqpl= "SELECT P FROM Pedido AS P";
        return em.createQuery(jqpl,Pedido.class).getResultList();
    }
    
    public List<Pedido> consultaPorNombre(String nombre){
        String jpql =" SELECT P FROM Pedido AS P WHERE P.nombre=:nombre ";
        return em.createQuery(jpql,Pedido.class).setParameter("nombre", nombre).getResultList();
    }
    
    public List<Pedido> consultaPorNombreDeCategoria(String nombre){
        String jpql="SELECT p FROM Pedido AS p WHERE p.categoria.nombre=:nombre";
        return em.createQuery(jpql,Pedido.class).setParameter("nombre", nombre).getResultList();
    }
     
    public BigDecimal consultarPrecioPorNombreDePedido(String nombre) {
        String jpql="SELECT P.precio FROM Pedido AS P WHERE P.nombre=:nombre";
        return em.createQuery(jpql,BigDecimal.class).setParameter("nombre", nombre).getSingleResult();
    }

}
package com.latam.alura.tienda.dao;

import java.math.BigDecimal;
import java.util.List;

import javax.persistence.EntityManager;

import com.latam.alura.tienda.modelo.Categoria;
import com.latam.alura.tienda.modelo.Cliente;

public class ClienteDao {
    
    private EntityManager em;

    public ClienteDao(EntityManager em) {
        this.em = em;
    }
    
    public void guardar(Cliente Cliente) {
        this.em.persist(Cliente);
    }
    
    
    public void actualizar(Cliente Cliente) {
        this.em.merge(Cliente);
    }
    
    public void remover(Cliente Cliente) {
        Cliente=this.em.merge(Cliente);
        this.em.remove(Cliente);
    }
    
    public Cliente consultaPorId(Long id) {
        return em.find(Cliente.class, id);
    }
    
    public List<Cliente> consultarTodos(){
        String jqpl= "SELECT P FROM Cliente AS P";
        return em.createQuery(jqpl,Cliente.class).getResultList();
    }
    
    public List<Cliente> consultaPorNombre(String nombre){
        String jpql =" SELECT P FROM Cliente AS P WHERE P.nombre=:nombre ";
        return em.createQuery(jpql,Cliente.class).setParameter("nombre", nombre).getResultList();
    }
    
    public List<Cliente> consultaPorNombreDeCategoria(String nombre){
        String jpql="SELECT p FROM Cliente AS p WHERE p.categoria.nombre=:nombre";
        return em.createQuery(jpql,Cliente.class).setParameter("nombre", nombre).getResultList();
    }
     
    public BigDecimal consultarPrecioPorNombreDeCliente(String nombre) {
        String jpql="SELECT P.precio FROM Cliente AS P WHERE P.nombre=:nombre";
        return em.createQuery(jpql,BigDecimal.class).setParameter("nombre", nombre).getSingleResult();
    }

}
package com.latam.alura.tienda.prueba;

import java.math.BigDecimal;

import javax.persistence.EntityManager;

import com.latam.alura.tienda.dao.CategoriaDao;
import com.latam.alura.tienda.dao.ClienteDao;
import com.latam.alura.tienda.dao.PedidoDao;
import com.latam.alura.tienda.dao.ProductoDao;
import com.latam.alura.tienda.modelo.Categoria;
import com.latam.alura.tienda.modelo.Cliente;
import com.latam.alura.tienda.modelo.ItemsPedido;
import com.latam.alura.tienda.modelo.Pedido;
import com.latam.alura.tienda.modelo.Producto;
import com.latam.alura.tienda.utils.JPAUtils;

public class RegistroDePedido {

    public static void main(String[] args) {
        registrarProducto();
        
        EntityManager em = JPAUtils.getEntityManager();
        
        ProductoDao productoDao = new ProductoDao(em);
        Producto producto = productoDao.consultaPorId(1l);
        
        ClienteDao clienteDao = ClienteDao(em);
        PedidoDao pedidoDao = new PedidoDao(em);
        
        
        Cliente cliente = new Cliente("Juan","k6757kjb");
        Pedido pedido = new Pedido(cliente);
        pedido.agregarItems(new ItemsPedido(5,producto,pedido));
        
        em.getTransaction().begin();
        
        clienteDao.guardar(cliente);
        pedidoDao.guardar(pedido);
        
        em.getTransaction().commit();

    }

    private static ClienteDao ClienteDao(EntityManager em) {
        // TODO Auto-generated method stub
        return null;
    }

    private static void registrarProducto() {
        Categoria celulares = new Categoria("CELULARES");

        Producto celular = new Producto("Xiaomi Redmi", "Muy bueno", new BigDecimal("800"), celulares);

        EntityManager em = JPAUtils.getEntityManager();
        ProductoDao productoDao = new ProductoDao(em);
        CategoriaDao categoriaDao = new CategoriaDao(em);
        
        em.getTransaction().begin();
        
        categoriaDao.guardar(celulares);
        productoDao.guardar(celular);	
        
        em.getTransaction().commit();
        em.close();
    }

}

Hola Enrique,

¿Ha podido resolver el error? Los colegas ayudarán con el código. Sin embargo, asegúrate de que todas las entidades estén correctamente anotadas con @Entity y que todas las relaciones entre ellas estén correctamente definidas. Por ejemplo, en tu código proporcionado, la entidad Pedido parece estar correctamente anotada. Asegúrate de que esto sea cierto para todas tus entidades.

Hibernate debe registrar en los logs toda la SQL que está ejecutando. Esto debería incluir las declaraciones CREATE TABLE para todas tus entidades. Si no ves estas declaraciones en los logs, es posible que Hibernate no esté reconociendo algunas de tus entidades por alguna razón.

Despues puedes limpiar y reconstruir tu proyecto.

Mucho éxito en todo lo que te propongas y si tienes alguna duda aquí estaremos para apoyarte.

¡Vamos juntos!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios

¡Buenas tardes Adriana!

Muchas gracias por el apoyo de los colegas, todavía no he resuelto el error; reviso nuevamente las entidades que parecen estar correctas y continuo avanzando en el curso.

Saludos!