I'm working with criteria query and want to fetch data based on date. However, criteria query like condition does not work with date.
i get date like 2020-08-25
from user.
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<FermBatch> cq = cb.createQuery(MyClass.class);
Root<MyClass> root = cq.from(MyClass.class);
cq.where(cb.like(root.get(MyClass_.date), date+"%"));
return em.createQuery(cq).getResultList();
With this like condition, it shows error:
The method like(Expression, String) in the type CriteriaBuilder is not applicable for the arguments (Path, String)
And in my db date is stored in like this 2020-08-25 03:02:06
How can I get all data based on passed date (only using date, time does not matter).
I also tried this solution from other stackoverflow question link:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<MyClass> cq = cb.createQuery(MyClass.class);
Root<MyClass> entity = cq.from(MyClass.class);
cq.select(entity);
List<Predicate> predicates = new ArrayList<Predicate>();
predicates.add(cb.like(cb.lower(entity.get(MyClass_.date).as(String.class)), "%"+date.toLowerCase()+"%"));
Path<Tuple> tuple = entity.<Tuple>get("date");
if(tuple.getJavaType().isAssignableFrom(Date.class)){
Expression<String> dateStringExpr = cb.function("DATE_FORMAT", String.class, entity.get("date"), cb.literal("'%d/%m/%Y %r'"));
predicates.add(cb.like(cb.lower(dateStringExpr), "%"+date.toLowerCase()+"%"));
}
cq.where(predicates.toArray(new Predicate[]{}));
TypedQuery<MyClass> query = em.createQuery(cq);
return query.getResultList();
This returned an empty arraylist. So what am I doing wrong?