Правильное выражение не является допустимым выражением при использовании replace в запросе mysema

#querydsl #mysema

#querydsl #mysema

Вопрос:

Работает следующее:

 QTransaction.transaction.postingText.lower().like("%"   filter.getPostingText().toLowerCase()   "%"))
  

Я пытаюсь выполнить аналогичный запрос, но заменить x на u:

 Expressions.stringTemplate("replace({0},'x','u')", QTransaction.transaction.postingText.lower()).like("%"   filter.getPostingText().toLowerCase()   "%"));
  

журнал показывает:

 replace(lower(transaction.postingText),'x','u') like ?5 escape '!']. 
The right expression is not a valid expression.
  

Что я делаю не так?

     @Bean
    @DependsOn("jmsConnectionFactory")
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() throws Exception {
        EclipseLinkJpaVendorAdapter vendorAdapter = new EclipseLinkJpaVendorAdapter();
        vendorAdapter.setGenerateDdl(false);
        vendorAdapter.setDatabasePlatform("org.eclipse.persistence.platform.database.PostgreSQLPlatform");
        vendorAdapter.setShowSql(false);
        LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
        factory.setJpaVendorAdapter(vendorAdapter);
        List<String> packages = new ArrayList<>();
        packages.addAll(Arrays.asList(PACKAGES_TO_SCAN_DATA_ENTITIES));
        packages.addAll(additionalPackagesToScan);
        factory.setPackagesToScan(packages.toArray(new String[] {}));
        factory.setDataSource(dataSource());
        factory.setJpaDialect(new EclipseLinkJpaDialect());
        Properties props = jpaProperties();
        factory.setJpaProperties(props);
        return factory;
    }
  

Упрощенный пример выглядит следующим образом:

 BooleanExpression boolExpr = Expressions.stringTemplate("replace({0},'x','u')", QTransaction.transaction.postingText).like("%"   filter.getPostingText()   "%");
transactionRepository.findAll(boolExpr);
  

с отображением журнала:

 An exception occurred while creating a query in EntityManager: 
Exception Description: Syntax error parsing [select transaction
from Transaction transaction
where replace(transaction.postingText,'x','u') like ?1 escape '!']. 
[54, 115] The expression is not a valid conditional expression.
  

Комментарии:

1. Какую СУБД вы используете? У вас правильно установлен диалект querydsl?

2. Также можем ли мы увидеть использование выражения в минимально воспроизводимом примере, пожалуйста? Т.е. оператор SELECT.

3. Мы используем Spring / Eclipselink / Postgresql. Я добавил, как в вопросе создается entitManagerFactory, следовательно, показывая setJpaDialect(..) и setDatabasePlatform(..)

4. Вы пробовали привязку в x и u с помощью replace({0},{1},{2}), и т.д.?