Я хочу использовать функции полнотекстового поиска MySQL с использованием JPA, без необходимости использовать собственный запрос.
Я использую EclipseLink, в котором есть функция для поддержки собственных команд SQL: FUNC . Однако примеры справки показывают, что это используется только с простыми функциями MySQL. Моя лучшая попытка заставить его работать с ПОИСКПОЗ & ПРОТИВ:
@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.