我需要执行按外键排序的查询
表格:



这是我的代码:

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


我尝试与此查询的:


Producto P其中P.descripcion类似于P.iddepto.depto asc的'%'顺序
Producto P其中P.descripcion像P.iddepto asc的'%'顺序

最佳答案

您需要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的输入。

10-04 19:45