2014-03-28 103 views
0

命令我需要做一個查詢,是爲了通過外鍵 表:如何通過外鍵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 like'%'order by P.iddepto.depto asc
  2. PRODUCTO P其中P.descripcion喜歡通過P.iddepto ASC '%' 爲了

回答

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注入漏洞。您應該清理您的輸入sSearch,columnasSortDir_0