Solucionado (ver solución)
Solucionado
(ver solución)
1
respuesta

[Bug] org.hibernate.hql.internal.ast.QuerySyntaxException

Al ejecutar la clase RegistroDeProducto lanza error al usar el método "consultarTodo()" de la clase ProductoDAO, aquí abao dejaré mi código y el mensaje de error.

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

RegistroDeProducto.java

public class RegistroDeProducto {

    public static void main(String[] args) {
        registrarProducto();
        EntityManager em = JPAUtil.getEntityManager();
        ProductoDAO productoDAO= new ProductoDAO(em);
        Producto producto = productoDAO.consultar(1L);
        System.out.println(producto.getNombre() + "\n");

        List<Producto> productoList = productoDAO.consultarTodo();
        productoList.forEach(prod->System.out.println(prod.getDescripcion()));

    }

    private static void registrarProducto() {
        Categoria cat = new Categoria("Monitores");
        Producto pro = new Producto("Monitor","Monitor curvo 27 pulgadas para pc",
                new BigDecimal("255"), cat);

        EntityManager em = JPAUtil.getEntityManager();
        ProductoDAO productoDAO= new ProductoDAO(em);
        CategoriaDAO catDAO = new CategoriaDAO(em);

        //Iniciando una transacción
        em.getTransaction().begin();

        //persiste la categoria
        catDAO.guardar(cat);
        //persiste el Producto
        productoDAO.guardar(pro);

        //guardado de datos
        em.getTransaction().commit();
        System.out.println("producto Guardado.");
        //sierra la conexion
        em.close();
    }
}

Producto.java

package com.latam.alura.tienda.modelo;

import javax.persistence.*;
import java.math.BigDecimal;
import java.time.LocalDate;

@Entity
@Table(name="productos")
public class Producto {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @Column(name = "nombre")
    private String nombre;
    @Column(name = "descripcion")
    private String descripcion;
    @Column(name = "precio")
    private BigDecimal precio;
    @Column(name = "fecha_registro")
    private LocalDate fechaDeRegistro = LocalDate.now();

    @ManyToOne
    @JoinColumn(name = "categoria")
    private Categoria categoria;

    public Producto() {
    }

    public Producto(String nombre, String descripcion, BigDecimal precio, Categoria categoria) {
        this.nombre = nombre;
        this.descripcion = descripcion;
        this.precio = precio;
        this.categoria = categoria;
    }

    /*SETTERS & GETTERS*/

ProductoDAO.consultarTodo()


    public List<Producto> consultarTodo(){
        String jqpl = "SELECT P FROM productos AS P";
        return this.em.createQuery(jqpl, Producto.class).getResultList();

    }

Si alguien tuvo el mismo error por favor comparta su solución.

1 respuesta
solución!

Hola Juan,

El error generalmente ocurre cuando hay un problema con la consulta HQL que estás intentando ejecutar. En tu caso, parece que el problema está en la consulta dentro del método consultarTodo() en la clase ProductoDAO. Se produce cuando Hibernate no puede encontrar la entidad mapeada correspondiente en la base de datos. Esto suele deberse a problemas de mapeo en tu configuración, a veces, los problemas de mapeo pueden resolverse limpiando y reconstruyendo el proyecto también.

Sin emabrgo, en tu consulta HQL, estás intentando seleccionar desde "productos", que parece ser el nombre de la tabla en tu base de datos. Sin embargo, en HQL, debes seleccionar desde el nombre de la clase de entidad, no desde el nombre de la tabla. En tu caso, deberías seleccionar desde Producto (el nombre de la clase de entidad), no desde "productos" (el nombre de la tabla).

Por lo tanto, tu consulta debería verse así:

public List<Producto> consultarTodo(){
    String jqpl = "SELECT P FROM Producto AS P";
    return this.em.createQuery(jqpl, Producto.class).getResultList();
}

Por favor, intenta hacer este cambio y ve si resuelve tu problema. 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