包含在 Spring-Data 和 QueryDSL 中搜索日历属性
Contains Search on Calendar Attribute in Spring-Data and QueryDSL
我想使用我的搜索字段以及使用 QueryDSL
和 Spring-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);
}
我想使用我的搜索字段以及使用 QueryDSL
和 Spring-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);
}