我需要执行按外键排序的查询
表格:
这是我的代码:
@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
任何列。将表别名为p
和d
。
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注入漏洞。您应该清理
sSearch
,columna
和sSortDir_0
的输入。