Skip to content

Commit 4e91fd9

Browse files
committed
DATAJDBC-102 - Determine the EntityInstantiator to be used dynamically.
Replaced the direct use of EntityInstantiator with EntityInstantiators. Moved it into the MappingContext because instantiation is part of the mapping process.
1 parent b1cd4d1 commit 4e91fd9

File tree

2 files changed

+17
-6
lines changed

2 files changed

+17
-6
lines changed

src/main/java/org/springframework/data/jdbc/core/EntityRowMapper.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,7 @@
2424

2525
import org.springframework.core.convert.ConversionService;
2626
import org.springframework.core.convert.converter.Converter;
27-
import org.springframework.data.convert.ClassGeneratingEntityInstantiator;
28-
import org.springframework.data.convert.EntityInstantiator;
27+
import org.springframework.data.convert.EntityInstantiators;
2928
import org.springframework.data.jdbc.core.mapping.JdbcMappingContext;
3029
import org.springframework.data.jdbc.core.mapping.JdbcPersistentEntity;
3130
import org.springframework.data.jdbc.core.mapping.JdbcPersistentProperty;
@@ -49,7 +48,7 @@ public class EntityRowMapper<T> implements RowMapper<T> {
4948
private static final Converter<Iterable<?>, Map<?, ?>> ITERABLE_OF_ENTRY_TO_MAP_CONVERTER = new IterableOfEntryToMapConverter();
5049

5150
private final JdbcPersistentEntity<T> entity;
52-
private final EntityInstantiator instantiator = new ClassGeneratingEntityInstantiator();
51+
5352
private final ConversionService conversions;
5453
private final JdbcMappingContext context;
5554
private final DataAccessStrategy accessStrategy;
@@ -97,7 +96,9 @@ public T mapRow(ResultSet resultSet, int rowNumber) throws SQLException {
9796
}
9897

9998
private T createInstance(ResultSet rs) {
100-
return instantiator.createInstance(entity, new ResultSetParameterValueProvider(rs, entity, conversions, ""));
99+
100+
return context.getInstantiatorFor(entity) //
101+
.createInstance(entity, new ResultSetParameterValueProvider(rs, entity, conversions, ""));
101102
}
102103

103104
/**
@@ -135,8 +136,8 @@ private <S> S readEntityFrom(ResultSet rs, PersistentProperty<?> property) {
135136
return null;
136137
}
137138

138-
S instance = instantiator.createInstance(entity,
139-
new ResultSetParameterValueProvider(rs, entity, conversions, prefix));
139+
S instance = context.getInstantiatorFor(entity) //
140+
.createInstance(entity, new ResultSetParameterValueProvider(rs, entity, conversions, prefix));
140141

141142
PersistentPropertyAccessor accessor = entity.getPropertyAccessor(instance);
142143
ConvertingPropertyAccessor propertyAccessor = new ConvertingPropertyAccessor(accessor, conversions);

src/main/java/org/springframework/data/jdbc/core/mapping/JdbcMappingContext.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,14 @@
2727
import java.util.HashSet;
2828
import java.util.List;
2929

30+
import lombok.Setter;
3031
import org.springframework.core.convert.ConversionService;
3132
import org.springframework.core.convert.support.DefaultConversionService;
3233
import org.springframework.core.convert.support.GenericConversionService;
34+
import org.springframework.data.convert.EntityInstantiator;
35+
import org.springframework.data.convert.EntityInstantiators;
3336
import org.springframework.data.convert.Jsr310Converters;
37+
import org.springframework.data.mapping.PersistentEntity;
3438
import org.springframework.data.mapping.PropertyPath;
3539
import org.springframework.data.mapping.context.AbstractMappingContext;
3640
import org.springframework.data.mapping.context.MappingContext;
@@ -59,6 +63,8 @@ public class JdbcMappingContext extends AbstractMappingContext<JdbcPersistentEnt
5963
@Getter private final NamingStrategy namingStrategy;
6064
@Getter private SimpleTypeHolder simpleTypeHolder;
6165
private GenericConversionService conversions = getDefaultConversionService();
66+
@Setter
67+
private EntityInstantiators instantiators = new EntityInstantiators();
6268

6369
/**
6470
* Creates a new {@link JdbcMappingContext}.
@@ -143,6 +149,10 @@ public ConversionService getConversions() {
143149
return conversions;
144150
}
145151

152+
public EntityInstantiator getInstantiatorFor(PersistentEntity<?, ?> entity) {
153+
return instantiators.getInstantiatorFor(entity);
154+
}
155+
146156
private static GenericConversionService getDefaultConversionService() {
147157

148158
DefaultConversionService conversionService = new DefaultConversionService();

0 commit comments

Comments
 (0)