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 字符串匹配和其他 属性 类型的精确匹配。
正在尝试测试 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 字符串匹配和其他 属性 类型的精确匹配。