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

Spring Data JPA: Using Example to filter date as string

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

例如,给定条件“1979”,我想过滤 return 由 findAll(Example<S> example) JPA 查询编辑的行,以便 return 任何行包含“1979”。

“问题”是该实体将日期(比如出生日期)定义为 LocalDate,因此,执行:

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

personPage = repository.findAll(personFilter);

PersonFilter#birthDate 本身就是一个 LocalDate

基本上,我必须让这个实体将出生日期声明为字符串才能使过滤器工作,但这是不可能的,因为数据库本身将其存储为 date.

有没有办法解决这样的问题?就像覆盖匹配工作的方式一样?

简短的回答是,你没有。

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


长答案是:

Query by Example (QBE) 是一种具有简单界面的 user-friendly 查询技术。它允许动态创建查询,并且不需要您编写包含字段名称的查询。

示例查询非常适合多种用例:

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

示例查询也有几个限制:

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