包含在 Spring-Data 和 QueryDSL 中搜索日历属性

Contains Search on Calendar Attribute in Spring-Data and QueryDSL

我想使用我的搜索字段以及使用 QueryDSLSpring-Data 的日期属性。例如:当有 04.01.2015 的记录并且我输入 201 时,它应该匹配,con 2015 包含 201.

像这样的东西应该可以工作:

// DOES NOT COMPILE!!!
private static BooleanExpression containsStart(final String search) {
    return contract.educationStart.containsIgnoreCase(search);
}

我的实体 Class 如下所示:

@Entity
public class Contract {

    ...

    @NotNull
    @Temporal(TemporalType.DATE)
    @DateTimeFormat(style = "M-")
    private Calendar educationStart;

    NotNull
    @Temporal(TemporalType.DATE)
    @DateTimeFormat(style = "M-")
    private Calendar educationEnd;

    ...
}

我找到了解决方案,希望它能对其他人有所帮助。

我的布尔表达式现在如下所示:

private static BooleanExpression containsStart(final String search) {
    final BooleanExpression containsDay = contract.educationStart.dayOfMonth().like("%" + search + "%");
    final BooleanExpression containsMonth = contract.educationStart.month().like("%" + search + "%");
    final BooleanExpression containsYear = contract.educationStart.year().like("%" + search + "%");
    return containsDay.or(containsMonth).or(containsYear);
}