我想建立一个在不同实体上搜索日期的查询。我的结构是:
- 合同有日期(不可为空)
- 员工有日期(不可为空)
- 员工可能有一个合同 ID(可为空)
如果员工有合同,我想检索合同日期。如果员工没有合同,那么我想返回员工日期。
到目前为止,我的代码是:
if (inputDate!= null) {
ParameterExpression<Date> exp = criteriaBuilder.parameter(Date.class, "inputDate");
criteria.add(criteriaBuilder.or(
criteriaBuilder.isNull(employee.get("contract")),
criteriaBuilder.lessThanOrEqualTo(employee.<Date>get("creationDate"), exp), criteriaBuilder.lessThanOrEqualTo((employee.join("contract").<Date>get("fromDate")), exp) ));}
这似乎不起作用。我似乎总是进入我没想到的 isNull 。
我很高兴对此进行更多研究,但我想我的问题是这是否是正确的处理方式。是吗?我在标准构建器中也看到了一个 selectCase,所以也许这可能是一个更好的解决方案。
任何指针都会受到极大的欢迎。
谢谢