【发布时间】:2018-12-21 09:37:09
【问题描述】:
我有当前的date(date) 和friday(fridayOfTheWeek) 和Monday(mondayOfTheWeek)。我想检查日期是否介于星期一和星期五之间。
我尝试使用谓词和获取方法,但我无法实现它
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);
第一种方法试过了
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>>
我尝试的第二种方法是:
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>)
我尝试的第三种方法是:
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)
【问题讨论】:
-
你不能用一些方法
boolean isWeekday(Date date)(或者更好的boolean isWeekday(LocalDate localDate)吗? -
不,因为我已经有了今天的日期、星期一和星期五的日期。所以我只能使用它们来获取数据。
-
只有当您想要获取每个(!)周的周一和周五之间的日期时,您才需要使用函数周。如果您想获取特定周的日期并且您已经计算了该特定周的星期一和星期五,那么只需使用简单的 between(root.get("date"), MondayOfTheWeek(), FridayOfTheWeek())
-
这个方法也报错。编辑了代码并提到了上面的错误。我无法理解为什么会出现错误。
-
请提供完整的源代码,包括类 Star、MondayOfTheWeek()、FridayOfTheWeek() 和创建 CriteriaQuery。