spring - Spring Boot JPA 中的全文搜索
问题描述
我正在实现基于姓氏的全文搜索,但出现以下语法错误。请帮助我
public interface FullTextSearchEmployeeRepository extends JpaRepository<Employee, Integer> {
@Query("SELECT emp FROM Employee emp WHERE MATCH (emp.firstName, emp.address, emp.passportNo) AGAINST (:lastName IN NATURAL LANGUAGE MODE)")
public List<Object[]> findFullTextSearchByLastName(@Param("lastName") String lastName);
}
下面是语法错误
org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token:
AGAINST near line 1, column 217 [SELECT emp FROM com.model.Employee
emp WHERE MATCH (emp.firstName, emp.address, emp.passportNo) AGAINST
(:lastName IN NATURAL LANGUAGE MODE)]
解决方案
在评论之后,JPQL 不能使用来自特定供应商的本地函数或关键字,例如 MATCH / AGAINST。为了使用这样的,您需要使用本机查询:
public interface FullTextSearchEmployeeRepository extends
JpaRepository<Employee, Integer> {
@Query(value = "SELECT emp.* FROM employee emp WHERE MATCH (emp.first_name, emp.address, emp.passport_no) AGAINST (:lastName IN NATURAL LANGUAGE MODE)", nativeQuery = true)
public List<Employee> findFullTextSearchByLastName(@Param("lastName") String lastName);
}
注意:我在这里假设列名和表名,因为它们不存在于问题中。随时更新到正确的。此外,不是返回 Object[],而是返回实体本身。
推荐阅读
- sql - 为什么 to_Char(date, 'd') 函数会简单地忽略 Oracle 过程中的条件逻辑?
- python - 正则表达式替换双分号
- mongodb - 显示 dbs 命令仅列出管理员、本地、配置
- ruby-on-rails - Rails 5 - 如何创建自定义脚手架生成器?
- angular - 如何对进行中 RXJS 请求的取消进行单元测试
- oracle - Oracle:将两个表与一个公共列加上第二个表中的一个附加列(最新生效日期)连接以选择其他列
- python - 程序在 if 不应该结束时使用循环后结束
- c - C 函数中的源代码跳过,每个 LOC 都执行但几行代码
- c - Malloc error in excel called .exe library
- hadoop - Hive 查询未读取分区字段