- Поле: используется в .where( ).
- Оператор: определяет ограничение (, .le(), .isNull() и т. д.).
Код: Выделить всё
.eq()
- < strong>Значение: добавляется к ограничению в качестве параметра, если применимо.
Код: Выделить всё
@@
Я предполагаю, что политика разработчиков Blaze Persistence может быть аналогична политике разработчиков Criteria API (https://github.com/spring-projects/spring- data-r2dbc/issues/825), поэтому я просто хотел проверить, не пытался ли кто-нибудь еще решить эту задачу с помощью Blaze Persistence и нашел элегантное решение (или, по крайней мере, лучшее, чем я придумал). с).
Предлагаемое решение:
Мой подход добавляет две пользовательские функции JPQL: первая вызывается в BaseWhereBuilder, вторая в RestrictionBuilder:
Первая функция "TS_VECTOR_PREFIX":
Код: Выделить всё
@Override
public void render(FunctionRenderContext context) {
context.addChunk("1");
}
Код: Выделить всё
@Override
public void render(FunctionRenderContext context) {
context.addChunk("1 AND TO_TSVECTOR('simple',");
context.addArgument(0);
context.addChunk(") @@ TO_TSQUERY('simple',");
context.addArgument(1);
context.addChunk(")");
}
- Тривиальное условие () для использования добавленного "="from .eqExpression() из CriteriaBuilder.
Код: Выделить всё
1 = 1
- Фактическое полное условие текстового поиска с использованием @@.
Код: Выделить всё
public PagedList findRecords(Class view, QueryData query, int offset, int pageSize, Sort sort) {
CriteriaBuilder criteriaBuilder = criteriaBuilderFactory.create(entityManager, SomeEntity.class);
criteriaBuilder.where("TS_VECTOR_PREFIX()").eqExpression("TS_VECTOR_MAIN(names.singleStringName, 'pamel:*&Blake:*')");
return entityViewManager.applySetting(EntityViewSetting.create(view), criteriaBuilder)
.page(offset, pageSize)
.getResultList();
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... nce-criter