命名查询因此:
@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功能令人头疼
答案 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提供类似的东西。