我想通过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查询。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!