Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/08/2013, 18:04
Avatar de Sumerio
Sumerio
 
Fecha de Ingreso: octubre-2009
Mensajes: 195
Antigüedad: 14 años, 6 meses
Puntos: 6
Pregunta Consulta de como usar SQL-QUERY de Hibernate ?

Hola a todos, tengo una consulta resulta que tengo una aplicacion que tiene una arquitectura de Spring MVC con Hibernate, integrando con una libreria javascript Ext Js:
Pero esta version que tengo para cargar las listas estaba usando Criteria, no lo veo eficiente usar Criteria porque me lista todos los campos de la tabla, porque me enfoque en usar SQL-QUERY en XML de la siguiente forma:

Código:
<hibernate-mapping>
  <sql-query name="getListCustomers">
        SELECT  ba_customer_id,
                ba_company_id,
                code,
                name,
                comercial_name,
                discount,
                is_active,
                created,
                observation
        FROM ba_customer        
  </sql-query>    
</hibernate-mapping>
En el CustomerDAOHibernate, lo tengo asi:

Código:
@SuppressWarnings("unchecked")
    public List<Customer> getAll(Pagination pagination) {
        Query query = sessionFactory.openSession().getNamedQuery("getListCustomers");
       
        List criteria = query.list();

        for (Iterator iterator = criteria.iterator(); iterator.hasNext();) {
            Customer customer = (Customer) iterator.next();
            System.out.println("Name: " + customer.getName());            
        }
    }
El punto es como usar el mismo codigo que usaba con Criteria que funcionaba bien (ya que he notado que criteria tiene unos metodos especiales como setProjection y otros), que les muestro a continuacion:

Código:
@SuppressWarnings("unchecked")
    public List<Customer> getAll(Pagination pagination) {
        Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Customer.class);
        //Total Count
        criteria.setProjection(Projections.rowCount());
        pagination.setTotalCount(criteria.uniqueResult());
       
        //Pagination
        criteria.setProjection(null);
        criteria.setFirstResult(Integer.parseInt(String.valueOf(pagination.getStart())));
        criteria.setMaxResults(Integer.parseInt(String.valueOf(pagination.getLimit())));
        if(StringUtils.isNotEmpty(pagination.getSort())){
            try {
                JSONArray jsonArray = new JSONArray(pagination.getSort());
                if(jsonArray.length()>0){
                    JSONObject jsonObject = jsonArray.getJSONObject(0);
                    String property = jsonObject.getString("property");
                    String direction = jsonObject.getString("direction");
                    if("ASC".equalsIgnoreCase(direction)){
                        criteria.addOrder(Order.asc(property));
                    }else{
                        criteria.addOrder(Order.desc(property));
                    }
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }else{
            criteria.addOrder(Order.desc("customerId"));
        }
        return criteria.list();
    }
Se los agradecere de que me puedan orientar para que tenga la misma funcionalidad con SQL-QUERY.