Search code examples
springspring-mvchqlhibernate-criteria

Changing this HQL Queries to Hibernate Criteria


Could anybody please help me, or point me to the right direction to change the HQL Queries in my DAO implementation to Hibernate criteria?? I am using spring mvc, and here is the code:

package cl.cbrtemuco.autoconsultas.dao;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.query.Query;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import cl.cbrtemuco.autoconsultas.entity.Titulos;

@Repository
public class TitulosDAOImpl implements TitulosDAO {

    @Autowired
    SessionFactory sessionFactory;

    @Override
    public List<Titulos> searchTitulosByRazonSocial(String rSocial) {
        Session currentSession = sessionFactory.getCurrentSession();
        Query<Titulos> theQuery = currentSession.createQuery("from Titulos where RazonSocial like :rSocial",
                Titulos.class);
        theQuery.setParameter("rSocial", "%" + rSocial.toLowerCase() + "%");
        List<Titulos> titulosEncontrados = theQuery.getResultList();
        return titulosEncontrados;
    }

    @Override
    public Titulos getTituloRSoc(int idTit) {
        Session currentSession = sessionFactory.getCurrentSession();
        Titulos datTituloRSoc = currentSession.get(Titulos.class, idTit);
        return datTituloRSoc;
    }

    @Override
    public Titulos getTituloNombre(int idTit) {
        Session currentSession = sessionFactory.getCurrentSession();
        Titulos datTituloNombre = currentSession.get(Titulos.class, idTit);
        return datTituloNombre;
    }

    @Override
    public List<Titulos> searchTitulosByNombre(String apPaterno, String apMaterno, String nombres) {
        Session currentSession = sessionFactory.getCurrentSession();
        Query<Titulos> theQuery = currentSession.createQuery(
                "from Titulos where ApellidoPaterno like :apPaterno or ApellidoMaterno like :apMaterno or Nombres like :nombres", Titulos.class);
    theQuery.setParameter("apPaterno", "%"+apPaterno.toLowerCase()+"%")
                .setParameter("apMaterno", "%"+apMaterno.toLowerCase()+"%")
                .setParameter("nombres", "%"+nombres.toLowerCase()+"%");
        List<Titulos> titulosEncontradosNombre = theQuery.getResultList();
        return titulosEncontradosNombre;
    }

}

I thank you in advance!! Thank you!!!


Solution

  • Try like this:

     @Override
    public List<Titulos> searchTitulosByRazonSocial(String rSocial) {
        Session currentSession = sessionFactory.getCurrentSession();
        Criteria c = currentSession.createCriteria(Titulos.class);
        c.add(Restrictions.like("RazonSocial", "%" + rSocial.toLowerCase() + "%"));
        List<Titulos> titulosEncontrados = (List<Titulos>)c.list();
        return titulosEncontrados;
    }
    
    @Override
    public List<Titulos> searchTitulosByNombre(String apPaterno, String apMaterno, String nombres) {
        Session currentSession = sessionFactory.getCurrentSession();
        Criteria c = currentSession.createCriteria(Titulos.class);
        Criterion or = Restrictions.or(
                            Restrictions.like("ApellidoPaterno", "%"+apPaterno.toLowerCase()+"%"), 
                            Restrictions.like("ApellidoMaterno", "%"+apMaterno.toLowerCase()+"%")
            );
        Criterion or2 = Restrictions.or(
                            or, 
                            Restrictions.like("ApellidoMaterno", "%"+apMaterno.toLowerCase()+"%"));
        c.add(or2);
        List<Titulos> titulosEncontradosNombre = (List<Titulos>)c.list();
        return titulosEncontradosNombre;
    }