JPA使用MySQL MATCH函数执行命名查询时出错

时间:2011-10-25 21:36:49

标签: mysql jpa

命名查询因此:

@NamedQuery(name = "Table.findFTS", query = "SELECT t FROM table t WHERE MATCH(t.field1, t.field2) AGAINST (':text' IN BOOLEAN MODE)")

和错误:

Exception: Exception [EclipseLink-8025] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.JPQLException Exception Description: Syntax error parsing the query [Businesses.findFTS: SELECT t FROM table t WHERE MATCH(t.field1, t.field2) AGAINST (':text' IN BOOLEAN MODE)], line 1, column 38: unexpected token [(]. Internal Exception: NoViableAltException(83@[()* loopback of 383:9: (d= DOT right= attribute )*])

我不知道为什么会这样,但似乎MATCH功能令人头疼

2 个答案:

答案 0 :(得分:1)

如果您在JPQL中执行查询,请记住您不使用SQL而是使用JPQL。据我所知,JPQL中没有'MATCH'功能。但是,您可能对NamedNativeQuery感兴趣。

答案 1 :(得分:1)

我不认为这是开箱即用的支持:

使用Hibernate时,您必须创建自己的方言:

public class MyMySQLDialect extends org.hibernate.dialect.MySQLDialect {
    public MyMySQLDialect() {
        super();
        registerFunction("match", new MatchFunction(new AnyType(),"?1 AGAINST ?2"));
    }
}

我想EclipseLink提供类似的东西。