Hibernate FullTextEntityManager запрос с подзапросом ORM ID не удалось запустить - PullRequest
0 голосов
/ 05 июня 2019

У меня есть полнотекстовый запрос, который по совету из предыдущего вопроса я отфильтровал с помощью запроса Id. По какой-то причине запрос не запускается (я уверен, что он был запущен раньше, но ...) Кто-нибудь может понять почему?

    Class<?> entityClass = entityType.getJavaType();

    List<String> fields = buildFields(entityType.getProperties());

    FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(getEntityManager());

    SearchFactory searchFactory = fullTextEntityManager.getSearchFactory();
    QueryContextBuilder queryContextBuilder = searchFactory.buildQueryBuilder();
    QueryBuilder queryBuilder = queryContextBuilder.forEntity(entityClass).get();

    CriteriaBuilder idBuilder = m_storage.getCriteriaBuilder();
    CriteriaQuery idQuery = idBuilder.createQuery(entityClass);

    Root from = idQuery.from(entityClass);        
    idQuery.select(from.get("OID"));

    Subquery<Long> subquery = idQuery.subquery(Long.class);
    Root dateSQ = subquery.from(entityClass);

    subquery.select(idBuilder.max(dateSQ.get("modDateTime")));
    subquery.groupBy(dateSQ.get("surname"));



idQuery.where(idBuilder.in(from.get("modDateTime")).value(subquery));
    TypedQuery typedQuery = m_storage.createQuery(idQuery);
    List<Long> ids = typedQuery.getResultList();

    BooleanJunction<?> idJunction = queryBuilder.bool();
    for (Long id : ids) {
           idJunction.must(queryBuilder.keyword().onField("recId").matching(id).createQuery());
    }

    SearchOption searchOption = uriInfo.getSearchOption();

    Query query = queryBuilder.bool()
                .must(processSearchExpression(searchOption.getSearchExpression(), queryBuilder,
            fields.toArray(new String[fields.size()]))).filteredBy(idJunction.createQuery())
             .createQuery();

    FullTextQuery fullTextQuery = fullTextEntityManager.createFullTextQuery(query, entityClass);

    return fullTextQuery;

//fullTextQuery fails to run 

Если я уберу фильтр и так

query = queryBuilder.bool()
                .must(processSearchExpression(searchOption.getSearchExpression(), queryBuilder,
            fields.toArray(new String[fields.size()])))
             .createQuery(); 

Запрос выполняется, но, очевидно, не фильтруется по идентификаторам. В фильтре есть идентификаторы. Когда я устанавливаю для showSQL значение true, я вижу запрос, если у меня нет фильтра, но не отображается запрос, когда у меня есть фильтр (но не выдается ошибка)

Кажется, я не могу найти никаких проблем?!

...