Попробуйте найти способ составления SQL запроса со столбцами в случае змеи. Затем SQL запрос предоставит Spring Data R2DB C DatabaseClient executor в виде простого текста. Я не использую модули jpa / hibernate, jdo или mon go.
Как я могу преобразовать имена столбцов в случай змеи? Может быть, есть какая-то конфигурация или что-то можно переопределить, чтобы сделать этот трюк. Поскольку, кроме метода регулярных выражений, для проверки всего составного SQL запроса в виде простого текста в верхнем регистре символов для преобразования его в добавление подчеркивания впереди, у меня больше нет идей, как это сделать.
build.gradle:
plugins {
id 'idea'
id 'java'
id 'org.springframework.boot' version '2.2.1.RELEASE'
}
apply plugin: 'io.spring.dependency-management'
ext {
queryDslVersion = '4.2.2'
javaxAnnotationVersion = '1.3.2'
}
dependencies {
implementation('org.springframework.boot:spring-boot-starter-webflux')
compile("com.querydsl:querydsl-sql:${queryDslVersion}")
compileOnly('org.projectlombok:lombok')
annotationProcessor('org.projectlombok:lombok')
annotationProcessor("com.querydsl:querydsl-apt:${queryDslVersion}:general")
annotationProcessor("javax.annotation:javax.annotation-api:${javaxAnnotationVersion}")
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
testImplementation('io.projectreactor:reactor-test')
}
idea {
module {
sourceDirs += file('generated/')
generatedSourceDirs += file('generated/')
}
}
запрос:
public Flux<Foo> findByCollectionQuery(FooCollectionQuery collectionQuery) {
var foo = QFoo.foo;
var bar = QBar.bar;
var predicates = new BooleanBuilder();
var query = new PostgreSQLQuery<>(null);
query.select(foo, bar.someProperty)
.from(foo)
.leftJoin(bar).on(bar.id.eq(foo.barId));
collectionQuery.getFooId().ifPresent(fooId -> predicates.and(foo.fooId.eq(fooId)));
...
query.where(predicates).orderBy(payment.created.desc())
.offset(collectionQuery.getPageable().getOffset())
.limit(collectionQuery.getPageable().getPageSize());
return this.client.execute(query.getSQL().getSQL())
.as(Foo.class)
.fetch()
.all();
}