Search code examples
javahibernatehql

Query Hibernate or HQL not return result


I'm trying to do a query by id in two ways, however, the resutlado is not returned. Is there anything wrong in my code? The I made in two ways:

public Laudo buscarLaudoPorCodigo(Long idLaudo) {
    Session sessao = HibernateUtil.getSessionFactory().openSession();
    try {
        System.out.println(idLaudo);
        Criteria consulta = this.session.createCriteria(Laudo.class);
        consulta.add(Restrictions.idEq(idLaudo));
        Laudo resultado = (Laudo) consulta.uniqueResult();
        System.out.println(resultado);
        System.out.println(idLaudo);
        return resultado;
    } catch (RuntimeException erro) {
        throw erro;
    } finally {
        sessao.close();
    }
}

Second way:

public Laudo teste2(Long idLaudo) {
    System.out.println("veio da visao "+idLaudo);
    String hql = "select l from Laudo l where l.id_laudo = :idLaudo";
    Query consulta = this.session.createQuery(hql);
    consulta.setLong("id_laudo", idLaudo);
    System.out.println("veio do bd "+consulta);
    return (Laudo) consulta.uniqueResult();
}

And my Bean:

public void buscarLaudoPorCodigo() {
    try {
        LaudoDAOHibernate laudoDAOHibernate = new LaudoDAOHibernate();
        Laudo resultado = laudoDAOHibernate.buscarLaudoPorCodigo(laudo.getIdLaudo());
        if (resultado == null) {
            System.out.println("laudo nao encontrado");
        } else {
            laudo = resultado;
        }
    } catch (RuntimeException erro) {
    }
}

The two queries, both Hibernate, as in hql not return the id


Solution

  • I managed to solve using the same session of the search method, as before, was using the Session class. The correct code looked like this:

    public Laudo buscarLaudoPorCodigo(Long idLaudo) {
        Session sessao = HibernateUtil.getSessionFactory().openSession();
        try {
            Criteria consulta = sessao.createCriteria(Laudo.class);
            consulta.add(Restrictions.idEq(idLaudo));
            Laudo resultado = (Laudo) consulta.uniqueResult();  
            return resultado;
        } catch (RuntimeException erro) {
            throw erro;
        } finally {
            sessao.close();
        }
    }