#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}), и т.д.?