У меня ток date(date)
и friday(fridayOfTheWeek)
и Monday(mondayOfTheWeek)
.Я хочу проверить, находится ли дата между понедельником и пятницей, включая.
Я пытался использовать метод предикатов и get, но не смог его реализовать
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Star> criteriaQuery = builder.createQuery(Teacher.class);
Root<Teacher> root = criteriaQuery.from(Teacher.class);
Join<Teacher, B> join = root.join("department").join("team");
criteriaQuery.where(builder.equal(join.get("department"), "subject"));
//criteriaQuery.where(builder.between(root.get("date")), MondayOfTheWeek(), FridayOfTheWeek());
criteriaQuery.select(root);
Query<Teacher> query = session.createQuery(criteriaQuery);
1-й метод попробовал это
criteriaQuery.where(builder.between(builder.function("week", Integer.class, root.get("date")), MondayOfTheWeek(), FridayOfTheWeek()));
и ошибка, которую я получаю на builder.between это
Bound mismatch: The generic method between(Expression<? extends Y>, Y, Y) of type CriteriaBuilder is not applicable for the arguments (Expression<Integer>, Date, Date). The inferred type Object&Comparable<?>&Serializable is not a valid substitute for the bounded parameter <Y extends Comparable<? super Y>>
2-й метод, который я попробовал:
criteriaQuery.where(builder.between(root.get("date")), MondayOfTheWeek(), FridayOfTheWeek());
Он дает ошибку, между которой
The method between(Expression<? extends Y>, Expression<? extends Y>, Expression<? extends Y>) in the type CriteriaBuilder is not applicable for the arguments (Path<Object>)
3-й метод, который я попробовал:
ParameterExpression<java.util.Date> parameter = builder.parameter(java.util.Date.class);
Predicate startPredicate = builder.greaterThanOrEqualTo(root.get(MondayOfTheWeek()), parameter);
Predicate endPredicate = builder.greaterThanOrEqualTo(root.get(FridayOfTheWeek()), parameter);
Ошибка, которую я получаю:
The method get(SingularAttribute<? super Teacher,Y>) in the type Path<Teacher> is not applicable for the arguments (Date)