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.