Problema al crear query usando hibernate

publicado por: Anonymous

Estoy realizando la siguiente consulta:

    @Override
    public List<Estudiante> buscarEstudiantes() {   
        Session session = getSession();
        Query query = session.createSQLQuery("from Estudiante");        
        return query.list();
    }

Y retorna el siguiente error:

Estado HTTP 500 – Request processing failed; nested exception is
org.hibernate.exception.SQLGrammarException: could not extract
ResultSet

La única manera que funciona la consulta es si utilizo los nombres de las columnas de la tabla pero si trato de usar los nombres de las propiedades de la clase me da error.

Consulta que si funciona:

    @Override
    public List<Estudiante> buscarEstudiantesSinCurso() {
        Session session = getSession();
        Query query = session.createSQLQuery("SELECT E.Est_Primer_Nombre FROM Estudiante E");
        return query.list();
    }

Clase estudiante:

@Entity
@Table(name="estudiante") 
public class Estudiante {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "est_id")
    private int id;

    @Column(name = "est_rut")
    private String rut;

    @NotNull
    @Size(min=3, max=50)
    @Column(name = "est_primer_nombre", nullable = false)
    private String primerNombre;

    @Size(min=3, max=50)
    @Column(name = "est_segundo_nombre", nullable = true)
    private String segundoNombre;

    @NotNull
    @Size(min=3, max=50)
    @Column(name = "est_primer_apellido", nullable = false)
    private String primerApellido;

    @NotNull
    @Size(min=3, max=50)
    @Column(name = "est_segundo_apellido", nullable = false)
    private String segundoApellido;


    @NotNull
    @DateTimeFormat(pattern="dd/MM/yyyy") 
    @Column(name = "est_fecha_nacimiento", nullable = false)
    @Type(type="org.jadira.usertype.dateandtime.joda.PersistentLocalDate")
    private LocalDate fechaNacimiento;

    @ManyToMany(fetch = FetchType.LAZY, mappedBy = "estudiantes")
    private Set<Curso> cursos = new HashSet<Curso>(0);

    // aquí, getters y setters
}

Encontré varias preguntas parecidas a la mía pero ninguna solución me funciono.

Como puedo hacer para utilizar los nombre de las propiedades de la clase y no tenga que colocar el nombre de la columna.

Estoy utilizando hibernate 4.3.6.

solución

Estas usando un createSQLQuery por eso te manda un error, ya que creas un SQL nativo.

Intenta:

    Session session = getSession();
    Query query = session.createQuery("from Estudiante");        
    return query.list();

en su lugar para crear un query con HQL


Digamos que createSQLQuery es para consultas de SQL nativas es decir

Select * From Tabla

Y createQuery es para Hibernate Query Lenguage (HQL) es decir

From Tabla
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *