How to use MySQL's full text search from JPA

前端 未结 7 1889
谎友^
谎友^ 2020-12-15 13:55

I want to use MySQL\'s full text search features using JPA, without having to use a native query.

I am using EclipseLink, which has a function to support native SQL

7条回答
  •  萌比男神i
    2020-12-15 14:41

    The simplest variant is to use NativeQuery

    Example of use it with mapping to JPA entity (FiasAddress):

    public class FiasServiceBean implements FiasService {
    
        @PersistenceContext(unitName = "fias")
        EntityManager entityManager;
    
        @Override
        public Collection search(String name, int limit, int aolevel) {
            Query query = entityManager.createNativeQuery(
                    "SELECT fa.* FROM fias.addressobject fa" +
                            " WHERE MATCH(FORMALNAME) AGAINST (:name IN NATURAL LANGUAGE MODE)" +
                            " AND AOLEVEL = :AOLEVEL" +
                            " LIMIT :limit",
                    FiasAddress.class
            );
            query.setParameter("name", name);
            query.setParameter("limit", limit);
            query.setParameter("AOLEVEL", aolevel);
            Iterator iterator = query.getResultList().iterator();
            ArrayList result = new ArrayList<>();
            while (iterator.hasNext()) {
                result.add((FiasAddress) iterator.next());
            }
            return result;
        }
    }
    

提交回复
热议问题