我正在使用Spring Data JPA查询从数据库中获取搜索结果。我正在按名称或描述搜索结果(这些是我表中的列)。
List<MyClass> findByNameIgnoreCaseContainingOrDescriptionIgnoreCaseContaining(String name, String description);
当用户尝试搜索包含特殊字符的内容(例如"Book ( _ , # , %, etc.)
")时,这就是问题。在这种情况下,JPA 使用接受下划线或其他特殊字符(如 LIKE 模板的一部分)而不是搜索条件的LIKE
构建 SQL 查询。我怎样才能避免这种情况?
附言我正在使用 MySQL
我不完全确定它在 spring-data 中是如何工作的,也许有一种更干净的方法,但您可以在将这些字符传递给查询之前屏蔽它们。
例如:
String name = name.replace("_", "\_");
String description = description.replace("_", "\_");
然后打电话给findByNameIgnoreCaseContainingOrDescriptionIgnoreCaseContaining(name, description)
.