我在Spring Data 仓库中有以下方法:
@Query("""
select t from ToneEntity t
where (:title is null or (t.title like %:title%))
and (:albumId is null or (t.album.id = :albumId))
and (:artistId is null or (t.artist.id = :artistId))
and (:creatorId is null or (t.creator.id = :creatorId))
""")
fun findFilteredTones(
@Param("title") title: String?,
@Param("albumId") albumId: Long?,
@Param("artistId") artistId: Long?,
@Param("creatorId") creatorId: Long?,
pageable: Pageable
): List<ToneEntity>
当标题包含_或%字符时,Spring Data 将它们作为通配符传递,而不是作为文字传递。例如:我在数据库中有一个标题为“bug_with_underscore”的音调。Web UI上的用户传递“”以查找标题中带有“”文字的音调,但实际结果包括所有音调。
如何在LIKE查询中设置自动字符转义?
Spring Data JPA版本:2.3.5
我发现了几种可能的解决方案:
1.使用concat和replace SQL函数:https://stackoverflow.com/questions/30740432/escaping-values-in-spring-data-repository
1.在将通配符传递给查询之前屏蔽它们:https://stackoverflow.com/questions/53558667/java-jpa-sql-accept-wrong-with-like
2022年有更好的解决方案吗?到目前为止,我还没有发现比使用方面手动转义通配符更好的方法。因为这个问题在我们的项目中经常发生
1条答案
按热度按时间fbcarpbf1#
这可能对你有帮助,但不幸的是,它对我没有帮助,因为这种语法在Sping Boot 3中不再有效。我在Sping Boot 2中尝试了它,并且成功了。它是在Java中,但查询部分不应该有任何不同。
来源:https://www.baeldung.com/spring-jpa-like-queries#2-ordered-parameters