1
respuesta

Alguien sabe que es lo que causa este error, eh seguido al instructor paso a paso

Exception in thread "main" java.lang.ExceptionInInitializerError
    at com.latam.alura.tienda.prueba.RegistroDeProducto.registrarProducto(RegistroDeProducto.java:36)
    at com.latam.alura.tienda.prueba.RegistroDeProducto.main(RegistroDeProducto.java:17)
Caused by: org.hibernate.DuplicateMappingException: The [com.latam.alura.tienda.modelo.Producto] and [com.mx.alura.tienda.modelo.Producto] entities share the same JPA entity name: [Producto] which is not allowed!
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.addEntityBinding(InFlightMetadataCollectorImpl.java:311)
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:813)
    at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.processEntityHierarchies(AnnotationMetadataSourceProcessorImpl.java:225)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess$1.processEntityHierarchies(MetadataBuildingProcess.java:239)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:282)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1460)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1494)
    at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:56)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
    at com.latam.alura.tienda.utils.JPAUtils.<clinit>(JPAUtils.java:10)

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidadDe igual manera comparto el RegistroDeProducto

public class RegistroDeProducto {

    public static void main(String[] args) {
        registrarProducto();
        EntityManager em = JPAUtils.getEntityManager();
        ProductoDao productoDao = new ProductoDao(em);
        Producto producto = productoDao.consultaPorId(1l);
        System.out.println(producto.getNombre());
        
        //List<Producto> productos = productoDao.consultarTodo();
        List<Producto> productos = productoDao.consultaPorNombre("Xiaomi");
        //List<Producto> productos = productoDao.consultarPorNombreDeCategoria("CELULARES");
        
        productos.forEach(prod->System.out.println(prod.getDescripcion()));
        
    }

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

        Producto celular = new Producto("Xiaomi", "Calidad precio", new BigDecimal("300"), 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();
    }

}
1 respuesta

por lo que veo y entiendo creo que tienes dos carpetas con el mismo mapeo de la tabla Productos:

Caused by: org.hibernate.DuplicateMappingException: The [com.latam.alura.tienda.modelo.Producto] and [com.mx.alura.tienda.modelo.Producto] entities share the same JPA entity name: [Producto] which is not allowed!

Entoces borra la clase Producto que tengas en la carpeta de com.mx.alura.tienda.modelo para que te deje hacerlo o no mapees esa clase.