QueryDSL - преобразование предикатов: изменение корневого пути и проверка структуры

1

Я использую эту потрясающую библиотеку, но у меня есть проблема.

Я реализую шаблон DTO, поэтому я использую другой проект для автоматического преобразования EJB в DTO с использованием соглашений об именах.

Затем я хочу запросить DTO и получить реальный результат (EJB-запрос).

Я выполнил QueryDSL с JPAAnnotationProcessor на моих ENTITIES и QuerydslAnnotationProcessor на моих DTO.

Например:

  • Пользователь (Long Id, String username, Site site)
  • DTO UserDto (длинный идентификатор, имя пользователя String, имя_терминала)

Преобразование объектов хорошо, "siteName" автоматически соответствует "site.name".

Итак, я поставил QueryDSL Query как: userDto.id.gt(20).and(userDto.username.like("a%")).and(userDto.siteName.like("%b"));

Я ищу способ создания соответствующего запроса объекта

Единственная идея, которую я получил, это:

  • Клонировать запрос
  • Измените путь "userDto" на "user"
  • Проверяйте каждый предикат, чтобы узнать, существует ли свойство и соответствует ли тип

Любой способ сделать это или достичь моей цели?

благодаря

Теги:
predicate
querydsl
dto
visitor

1 ответ

0

Вам нужно будет преобразовать выражения в целом. С помощью специального ReplaceVisitor вы можете, например, переопределить визит (Path expr, @Nullable Void context)

Общий способ замены пути - использовать карту карты для определения замен:

if (map.contains(path)) {
    return map.get(path);
} else {
    return super.visit(path, context);
}

Вы можете использовать своего посетителя так:

Expression transformedExpression = expr.accept(visitor, null);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню