将此HQL查询更改为Hibernate标准

时间:2017-02-06 11:57:19

标签: spring spring-mvc hql hibernate-criteria

有人可以帮助我,或者指出正确的方向将我的DAO实现中的HQL查询更改为Hibernate标准? 我使用的是spring mvc,这里是代码:

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;
    }

}

我提前谢谢你!! 谢谢!!!

1 个答案:

答案 0 :(得分:0)

试试这样:

 @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;
}