Spring Data JPA:使用示例将日期过滤为字符串



尝试测试LocalDate是否包含给定的年、日或月。

例如,给定标准";1979";,我想过滤findAll(Example<S> example)JPA查询返回的行,这样它将返回任何包含"0"的行;1979";。

";"问题";实体将日期(比如说出生日期(定义为LocalDate,因此执行:

ExampleMatcher personFilter = ExampleMatcher.matchingAll()
.withMatcher("birthDate", ExampleMatcher.GenericPropertyMatchers
.contains().ignoreCase());
personPage = repository.findAll(personFilter);

PersonFilter#birthDate本身就是一个LocalDate

基本上,我必须让这个实体将出生日期声明为String,过滤器才能工作,但这是不可能的,因为DB本身将其存储为date

有办法解决这样的问题吗?比如覆盖匹配的工作方式?

简单的答案是,你没有。

有关更高级的用例和谓词定义,请查看Querydsl支持。


答案很长:

按示例查询(QBE(是一种界面简单、用户友好的查询技术。它允许动态创建查询,并且不需要编写包含字段名的查询。

Query by Example非常适合几种用例:

  • 使用一组静态或动态约束查询数据存储
  • 频繁重构域对象,而不用担心破坏现有查询
  • 独立于底层数据存储API工作

按示例查询也有几个限制:

  • 不支持嵌套或分组的属性约束,例如firstname=?0或(firstname=?1和lastname=?2(
  • 仅支持字符串的starts/contains/ends/regex匹配和其他属性类型的精确匹配

最新更新