我正在使用 Spring Data JPA Query 从数据库中获取搜索结果。我正在按名称或描述搜索结果(这些是我表中的列)。
List<MyClass> findByNameIgnoreCaseContainingOrDescriptionIgnoreCaseContaining(String name, String description);
当用户尝试搜索包含特殊字符(例如“Book(_、#、% 等)
”)时,问题就来了。在这种情况下,JPA 使用 LIKE
构建 SQL 查询,它接受下划线或其他特殊字符,如 LIKE 模板的一部分而不是搜索条件。我怎样才能避免这种情况?
附言我正在使用 MySQL
最佳答案
我不完全确定它在 spring-data 中是如何工作的,也许有更简洁的方法,但您可以在将这些字符传递给查询之前屏蔽它们。
例如:
String name = name.replace("_", "\\_");
String description = description.replace("_", "\\_");
然后调用findByNameIgnoreCaseContainingOrDescriptionIgnoreCaseContaining(name, description)
。
关于Java JPA。 SQL 接受 '_' LIKE 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53558667/