Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
1
respuesta

Excepcion al mapear elementos

He seguido el crusos y al ejecutar el código se realizan los cambios en la base de datos (crea las columnas y cambia los tipos de datos), pero muere antes de poder crear la instancia del producto en la base de datos debido a la siguiente excepcion:

Hibernate: 
    select
        next value for products_SEQ
may. 02, 2023 12:24:40 P. M. org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 0, SQLState: 42601
may. 02, 2023 12:24:40 P. M. org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: ERROR: error de sintaxis en o cerca de «products_SEQ»
  Position: 23
Exception in thread "main" jakarta.persistence.PersistenceException: Converting `org.hibernate.exception.SQLGrammarException` to JPA `PersistenceException` : could not extract ResultSet
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:165)
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:175)
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:182)
    at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:743)
    at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:721)
    at tienda.model.ProductDAO.save(ProductDAO.java:15)
    at tienda.model.TestConection.main(TestConection.java:18)

Esta es mi clase producto:


@Entity
@Table (name = "products")
public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    // @Column(name = "names")
    private String name;
    private BigDecimal price;
    private LocalDate registerDate = LocalDate.now();
    @Enumerated(EnumType.STRING)
    private Deparment deparment;

    public Product(String name, BigDecimal price, Deparment deparment) {
        this.name = name;
        this.price = price;
        this.deparment = deparment;
    }
}

Y mi main:

    public static void main(String[] args){
        Product celular = new Product("Chayomi", new BigDecimal("600.000"), Deparment.Phones);

        EntityManager em = JPAUtils.getEntityManager();

        ProductDAO productDAO = new ProductDAO(em);

        em.getTransaction().begin();

        productDAO.save(celular);

        em.getTransaction().commit();
        em.close();
    }

En la base de datos coincide el nombre de la tabla con la clase y demás, pero no crea la instancia en la tabla.

1 respuesta
solución!

¡Hola Johan!

La excepción que estás viendo indica que hay un error de sintaxis en la consulta que se está ejecutando en la base de datos. La consulta que se está ejecutando es la siguiente:

select next value for products_SEQ

El error indica que hay un problema en o cerca de "products_SEQ". Esto probablemente significa que no existe una secuencia con ese nombre en tu base de datos.

Verifica que la secuencia "products_SEQ" exista en tu base de datos y que tenga los permisos necesarios para ser accedida. También asegúrate de que el nombre de la secuencia sea el mismo que el que estás utilizando en tu consulta.

Espero que esto te ayude a solucionar el problema. ¡Buenos estudios!