我正在使用SpringDataJPA查询从数据库中获取搜索结果.我正在按名称或描述搜索结果(这些是我表中的列)。

    List<MyClass>  findByNameIgnoreCaseContainingOrDescriptionIgnoreCaseContaining(String name, String description);

当用户试图搜索包含特殊字符的内容时(例如“Book(#,#,%,”,等等)就会出现这个问题。在本例中,JPA使用LIKE构建SQL查询,LIKE接受下划线或其他特殊字符,如LIKE tamplate的一部分,而不是搜索条件。我怎样才能避免这种情况?
P.S.我在用MySQL

最佳答案

我不完全确定它在spring数据中是如何工作的,也许有一种更干净的方法,但是可以在将这些字符传递给查询之前屏蔽它们。
例如:

String name = name.replace("_", "\\_");
String description = description.replace("_", "\\_");

然后调用findByNameIgnoreCaseContainingOrDescriptionIgnoreCaseContaining(name, description)

10-07 19:26
查看更多