dynamic Hibernate criteria query
1 2 3 | Criteria criteria = new GenericDAO(entityManager, utx).getHibernateSession().createCriteria(DateEntry.class) .createAlias("user", "user") .createAlias("employee", "employee"); |
if (employee != null) {
criteria.add(Expression.eq(“employee”, employee));
}
if (customer != null) {
criteria.add(Expression.eq(“user”, customer));
}
if (category != null) {
criteria.createAlias(“categories”, “category”).add(
Expression.eq(“category.id”, category.getId()));
}
if (pending != null && closed != null) {
criteria.add(Expression.eq(“pending”, pending));
criteria.add(Expression.eq(“closed”, closed));
}
if (date != null && dateTo != null) {
criteria.add(Expression.between(“time”, date, dateTo));
}
if (orderParam != null) {
String orderParams[] = orderParam.split(“,”);
for (String orderParamEntry : orderParams) {
if (orderAscending) {
criteria.addOrder(Order.asc(orderParamEntry));
} else {
criteria.addOrder(Order.desc(orderParamEntry));
}
}
} else {
if (orderAscending) {
criteria.addOrder(Order.asc(“time”));
} else {
criteria.addOrder(Order.desc(“time”));
}
}
To avoid double-entries, use this code:
1 2 3 | filter.add(Restrictions.eq("user", user)); filter.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); List<DateEntry> results = filter.list(); |