如何通过外键hql进行排序

时间:2014-03-28 16:51:46

标签: mysql spring hibernate hql

我需要通过外键执行查询 表:

enter image description here

这是我的代码:

@Transactional
    public List<Producto> busquedaPaginada(int currPosition, int pageSize, String sSearch, int iSortCol_0, String sSortDir_0){

        try {
            sessionFactory.getCurrentSession().beginTransaction();

            String columna = buscarColumna(iSortCol_0);

            @SuppressWarnings("unchecked")
            List<Producto> lista = sessionFactory.getCurrentSession().createQuery("From Producto P Where P.descripcion like '"+sSearch+"%' order by P."+columna+" "+sSortDir_0)
                .setMaxResults(pageSize).setFirstResult(currPosition).list();

            sessionFactory.getCurrentSession().getTransaction().commit();
            return lista;


        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
            return null;
        }finally{
            sessionFactory.getCurrentSession().close();
        }

    }

    private String buscarColumna(int iSortCol_0){
        String columna="";
        try {

            if(iSortCol_0==0)
                columna="idproducto";
            else if (iSortCol_0==1) 
                columna="anio";
            else if (iSortCol_0==2)
                columna="clave";
            else if (iSortCol_0==3)
                columna="pventa";
            else if (iSortCol_0==4)
                columna="iddepto.depto";
            else
                return "idproducto";



        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }

        return columna;
    }

我尝试使用此查询:

  1. Producto P其中P.descripcion赞'%'由P.iddepto.depto asc
  2. 订购
  3. 产品P其中P.descripcion喜欢'%'订购P.iddepto asc

1 个答案:

答案 0 :(得分:0)

您需要JOIN表格,然后您可以ORDER BY任意列。将表别名为pd

SELECT d.iddepto, d.ideptto, p.iproducto, p.name, p.descripcion
FROM depto d
JOIN producto p ON d.iddepto = p.iddepto
WHERE p.descripcion like '%'
ORDER BY p.iddepto ASC

警告:请注意您的代码中存在SQL注入漏洞。您应该对sSearchcolumnasSortDir_0的输入进行清理。