我想通过JPA使用MySQL's full text search功能,而不必使用 native 查询。
我正在使用EclipseLink,它具有支持 native SQL命令的功能:FUNC。但是,帮助示例仅显示此功能与简单的MySQL函数一起使用。我尽最大努力使它与MATCH&AGAINST一起使用,如下所示:
@PersistenceContext(name="test")
EntityManager em;
Query query = em.createQuery("SELECT person FROM People person WHERE FUNC('MATCH', person.name) FUNC('AGAINST', :searchTerm)");
...
query.getResultList();
给出以下异常:
Caused by: NoViableAltException(32@[()* loopback of 822:9: (m= MULTIPLY right= arithmeticFactor | d= DIVIDE right= arithmeticFactor )*])
at org.eclipse.persistence.internal.libraries.antlr.runtime.DFA.noViableAlt(DFA.java:159)
at org.eclipse.persistence.internal.libraries.antlr.runtime.DFA.predict(DFA.java:116)
at org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.JPQLParser.arithmeticTerm(JPQLParser.java:4557)
... 120 more
我对使用FUNC方法的其他方法持开放态度。
我正在使用EJB 3和EclipseLink 2.3.1。
请您参考如下方法:
FUNC仅适用于常规打印功能,
IE。
匹配(arg1,arg2)
由于未按正常打印功能的方式打印MATCH arg1 AGAINST arg2,因此无法使用FUNC对其进行调用。
EclipseLink ExpressionOperators确实支持这样的打印功能,因此您可以定义自己的ExpressionOperator,但是ExpressionOperators目前仅通过EclipseLink Expression查询而不是JPQL支持。您可以记录一个增强功能以在JPQL中获得运算符(operator)支持。
您也可以使用 native SQL查询。




