我有一张桌子User
。 User
实体有firstName
,LastName
,middleName
。我想在其中一列中获取包含单词loe
(LIKE %loe%
)的所有行。我认为它缩小到:
Page<User> findBy<columnName>Or<ColumnName>Or(...)Contains(...)...
这应该有用,但如果我想将单词loe
与所有列匹配(fe。9
)该怎么办?这是一个正确的方法吗?或者我可能因为这个原因而创建一个@Query
?
答案 0 :(得分:1)
您可以使用@Query
并满足您的要求。但是您可能需要考虑使用Spring Data JPA with Specifications
并且可能更适合,因为这将减少您的repo中的查询方法的数量并允许可重用的谓词。
您只需实现Specification
接口并实现方法toPredicate(Root<T> root, CriteriaQuery query, CriteriaBuilder cb)
即可构建并返回满足您条件的Predicate
。使回购扩展JpaSpecificationExecutor
。好的是这些Predicates
是可重复使用的,您可以根据需要进一步组合它们。
您可以浏览Advanced Spring Data JPA - Specifications and Querydsl以获取概述。
为了进一步简化代码,为避免编码Specification
,您可能还需要检查Spring data JPA QueryDsl
。