Skip to content

Commit acbc814

Browse files
committed
Add column name fetch function
1 parent 039001a commit acbc814

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/core/R2dbcEntityTemplate.java

+24
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,21 @@
1818
import io.r2dbc.spi.ConnectionFactory;
1919
import io.r2dbc.spi.Row;
2020
import io.r2dbc.spi.RowMetadata;
21+
import org.springframework.data.annotation.Transient;
2122
import reactor.core.publisher.Flux;
2223
import reactor.core.publisher.Mono;
2324

2425
import java.beans.FeatureDescriptor;
26+
import java.lang.reflect.Field;
2527
import java.util.Collections;
2628
import java.util.List;
2729
import java.util.Map;
2830
import java.util.Optional;
31+
import java.util.Objects;
2932
import java.util.function.BiFunction;
3033
import java.util.function.Function;
3134
import java.util.stream.Collectors;
35+
import java.util.stream.StreamSupport;
3236

3337
import org.reactivestreams.Publisher;
3438
import org.springframework.beans.BeansException;
@@ -161,6 +165,26 @@ public R2dbcEntityTemplate(DatabaseClient databaseClient, ReactiveDataAccessStra
161165
this.projectionFactory = new SpelAwareProxyProjectionFactory();
162166
}
163167

168+
public <T> String getColumnName(Class<T> tableType, Field field) {
169+
Transient annotation = field.getDeclaredAnnotation(Transient.class);
170+
if (annotation != null) {
171+
throw new MappingException("This Column has Transient annotation");
172+
}
173+
174+
org.springframework.data.relational.core.mapping.Column columnAnnotation =
175+
field.getDeclaredAnnotation(org.springframework.data.relational.core.mapping.Column.class);
176+
if (columnAnnotation != null) {
177+
return columnAnnotation.value();
178+
}
179+
180+
return StreamSupport.stream(Objects.requireNonNull(mappingContext.getPersistentEntity(tableType)).spliterator(), false)
181+
.filter(column -> field.equals(column.getField()))
182+
.findFirst()
183+
.orElseThrow(() -> new MappingException("This Column name is not matched"))
184+
.getColumnName()
185+
.toString();
186+
}
187+
164188
@Override
165189
public DatabaseClient getDatabaseClient() {
166190
return this.databaseClient;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package org.springframework.data.r2dbc.core
2+
3+
import org.springframework.data.mapping.MappingException
4+
import kotlin.reflect.KProperty
5+
import kotlin.reflect.jvm.javaField
6+
7+
inline fun <reified T : Any, C : Any> R2dbcEntityTemplate.column(property: KProperty<C>): String = property.javaField?.let {
8+
this.getColumnName(T::class.java, it)
9+
} ?: throw MappingException("property is not valid")

0 commit comments

Comments
 (0)