1515 */ 
1616package  org .springframework .data .jdbc .repository .config ;
1717
18- import  java .util .ArrayList ;
1918import  java .util .Collection ;
2019import  java .util .Collections ;
2120import  java .util .HashSet ;
2221import  java .util .List ;
2322import  java .util .Optional ;
2423import  java .util .Set ;
2524
26- import  org .apache .commons .logging .Log ;
27- import  org .apache .commons .logging .LogFactory ;
2825import  org .springframework .beans .BeansException ;
2926import  org .springframework .context .ApplicationContext ;
3027import  org .springframework .context .ApplicationContextAware ;
3128import  org .springframework .context .annotation .Bean ;
3229import  org .springframework .context .annotation .Configuration ;
3330import  org .springframework .context .annotation .Lazy ;
3431import  org .springframework .core .convert .converter .Converter ;
35- import  org .springframework .data .convert .CustomConversions ;
3632import  org .springframework .data .jdbc .core .JdbcAggregateOperations ;
3733import  org .springframework .data .jdbc .core .JdbcAggregateTemplate ;
3834import  org .springframework .data .jdbc .core .convert .DataAccessStrategy ;
39- import  org .springframework .data .jdbc .core .convert .DataAccessStrategyFactory ;
40- import  org .springframework .data .jdbc .core .convert .DefaultJdbcTypeFactory ;
4135import  org .springframework .data .jdbc .core .convert .IdGeneratingEntityCallback ;
4236import  org .springframework .data .jdbc .core .convert .JdbcConverter ;
4337import  org .springframework .data .jdbc .core .convert .JdbcCustomConversions ;
44- import  org .springframework .data .jdbc .core .convert .MappingJdbcConverter ;
4538import  org .springframework .data .jdbc .core .convert .QueryMappingConfiguration ;
4639import  org .springframework .data .jdbc .core .convert .RelationResolver ;
4740import  org .springframework .data .jdbc .core .dialect .DialectResolver ;
48- import  org .springframework .data .jdbc .core .dialect .JdbcArrayColumns ;
4941import  org .springframework .data .jdbc .core .dialect .JdbcDialect ;
5042import  org .springframework .data .jdbc .core .mapping .JdbcMappingContext ;
51- import  org .springframework .data .jdbc .core .mapping .JdbcSimpleTypes ;
52- import  org .springframework .data .mapping .model .SimpleTypeHolder ;
5343import  org .springframework .data .relational .RelationalManagedTypes ;
5444import  org .springframework .data .relational .core .conversion .RelationalConverter ;
5545import  org .springframework .data .relational .core .dialect .Dialect ;
56- import  org .springframework .data .relational .core .mapping .DefaultNamingStrategy ;
5746import  org .springframework .data .relational .core .mapping .NamingStrategy ;
5847import  org .springframework .data .relational .core .mapping .Table ;
59- import  org .springframework .data .util .TypeScanner ;
60- import  org .springframework .jdbc .core .JdbcTemplate ;
6148import  org .springframework .jdbc .core .namedparam .NamedParameterJdbcOperations ;
62- import  org .springframework .util .StringUtils ;
6349
6450/** 
6551 * Beans that must be registered for Spring Data JDBC to work. 
7763@ Configuration (proxyBeanMethods  = false )
7864public  class  AbstractJdbcConfiguration  implements  ApplicationContextAware  {
7965
80- 	private  static  final  Log  LOG  = LogFactory .getLog (AbstractJdbcConfiguration .class );
81- 
8266	@ SuppressWarnings ("NullAway.Init" ) private  ApplicationContext  applicationContext ;
8367
8468	private  QueryMappingConfiguration  queryMappingConfiguration  = QueryMappingConfiguration .EMPTY ;
@@ -96,7 +80,7 @@ public class AbstractJdbcConfiguration implements ApplicationContextAware {
9680	protected  Collection <String > getMappingBasePackages () {
9781
9882		Package  mappingBasePackage  = getClass ().getPackage ();
99- 		return  Collections . singleton ( mappingBasePackage  == null  ? null  : mappingBasePackage .getName ());
83+ 		return  mappingBasePackage  == null  ? List . of ()  : List . of ( mappingBasePackage .getName ());
10084	}
10185
10286	/** 
@@ -124,13 +108,7 @@ public RelationalManagedTypes jdbcManagedTypes() throws ClassNotFoundException {
124108	@ Bean 
125109	public  JdbcMappingContext  jdbcMappingContext (Optional <NamingStrategy > namingStrategy ,
126110			JdbcCustomConversions  customConversions , RelationalManagedTypes  jdbcManagedTypes ) {
127- 
128- 		JdbcMappingContext  mappingContext  = JdbcMappingContext 
129- 				.forQuotedIdentifiers (namingStrategy .orElse (DefaultNamingStrategy .INSTANCE ));
130- 		mappingContext .setSimpleTypeHolder (customConversions .getSimpleTypeHolder ());
131- 		mappingContext .setManagedTypes (jdbcManagedTypes );
132- 
133- 		return  mappingContext ;
111+ 		return  JdbcConfiguration .createMappingContext (jdbcManagedTypes , customConversions , namingStrategy .orElse (null ));
134112	}
135113
136114	/** 
@@ -143,7 +121,7 @@ public JdbcMappingContext jdbcMappingContext(Optional<NamingStrategy> namingStra
143121	 */ 
144122	@ Bean 
145123	public  IdGeneratingEntityCallback  idGeneratingBeforeSaveCallback (JdbcMappingContext  mappingContext ,
146- 			NamedParameterJdbcOperations  operations , Dialect  dialect ) {
124+ 			NamedParameterJdbcOperations  operations , JdbcDialect  dialect ) {
147125		return  new  IdGeneratingEntityCallback (mappingContext , dialect , operations );
148126	}
149127
@@ -157,19 +135,8 @@ public IdGeneratingEntityCallback idGeneratingBeforeSaveCallback(JdbcMappingCont
157135	 */ 
158136	@ Bean 
159137	public  JdbcConverter  jdbcConverter (JdbcMappingContext  mappingContext , NamedParameterJdbcOperations  operations ,
160- 			@ Lazy  RelationResolver  relationResolver , JdbcCustomConversions  conversions , Dialect  dialect ) {
161- 
162- 		JdbcArrayColumns  arrayColumns  = JdbcDialect .getArraySupport (dialect );
163- 		DefaultJdbcTypeFactory  jdbcTypeFactory  = new  DefaultJdbcTypeFactory (operations .getJdbcOperations (), arrayColumns );
164- 
165- 		MappingJdbcConverter  mappingJdbcConverter  = new  MappingJdbcConverter (mappingContext , relationResolver , conversions ,
166- 				jdbcTypeFactory );
167- 
168- 		if  (operations .getJdbcOperations () instanceof  JdbcTemplate  jdbcTemplate ) {
169- 			mappingJdbcConverter .setExceptionTranslator (jdbcTemplate .getExceptionTranslator ());
170- 		}
171- 
172- 		return  mappingJdbcConverter ;
138+ 			@ Lazy  RelationResolver  relationResolver , JdbcCustomConversions  conversions , JdbcDialect  dialect ) {
139+ 		return  JdbcConfiguration .createConverter (mappingContext , operations , relationResolver , conversions , dialect );
173140	}
174141
175142	/** 
@@ -183,31 +150,14 @@ public JdbcConverter jdbcConverter(JdbcMappingContext mappingContext, NamedParam
183150	@ Bean 
184151	public  JdbcCustomConversions  jdbcCustomConversions () {
185152
186- 		Dialect  dialect  = applicationContext .getBeanProvider (Dialect .class ).getIfAvailable ();
187- 
188- 		if  (dialect  == null ) {
189- 			LOG .warn ("No JdbcDialect bean found; CustomConversions will be configured without dialect-specific types." );
190- 			return  new  JdbcCustomConversions ();
191- 		}
192- 
193- 		SimpleTypeHolder  simpleTypeHolder  = new  SimpleTypeHolder (dialect .simpleTypes (), JdbcSimpleTypes .HOLDER );
194- 
195- 		return  new  JdbcCustomConversions (CustomConversions .StoreConversions .of (simpleTypeHolder , storeConverters (dialect )),
196- 				userConverters ());
153+ 		JdbcDialect  dialect  = applicationContext .getBean (JdbcDialect .class );
154+ 		return  JdbcConfiguration .createCustomConversions (dialect , userConverters ());
197155	}
198156
199157	protected  List <?> userConverters () {
200158		return  Collections .emptyList ();
201159	}
202160
203- 	private  List <Object > storeConverters (Dialect  dialect ) {
204- 
205- 		List <Object > converters  = new  ArrayList <>();
206- 		converters .addAll (dialect .getConverters ());
207- 		converters .addAll (JdbcCustomConversions .storeConverters ());
208- 		return  converters ;
209- 	}
210- 
211161	/** 
212162	 * Register a {@link JdbcAggregateTemplate} as a bean for easy use in applications that need a lower level of 
213163	 * abstraction than the normal repository abstraction. 
@@ -232,8 +182,8 @@ public JdbcAggregateTemplate jdbcAggregateTemplate(ApplicationContext applicatio
232182	 */ 
233183	@ Bean 
234184	public  DataAccessStrategy  dataAccessStrategyBean (NamedParameterJdbcOperations  operations , JdbcConverter  jdbcConverter ,
235- 			JdbcMappingContext  context , Dialect  dialect ) {
236- 		return  new   DataAccessStrategyFactory ( jdbcConverter ,  operations , dialect ,  this . queryMappingConfiguration ). create ( );
185+ 			JdbcMappingContext  context , JdbcDialect  dialect ) {
186+ 		return  JdbcConfiguration . createDataAccessStrategy ( operations , jdbcConverter ,  queryMappingConfiguration ,  dialect );
237187	}
238188
239189	/** 
@@ -245,7 +195,7 @@ public DataAccessStrategy dataAccessStrategyBean(NamedParameterJdbcOperations op
245195	 * @throws DialectResolver.NoDialectException if the {@link Dialect} cannot be determined. 
246196	 */ 
247197	@ Bean 
248- 	public  Dialect  jdbcDialect (NamedParameterJdbcOperations  operations ) {
198+ 	public  JdbcDialect  jdbcDialect (NamedParameterJdbcOperations  operations ) {
249199		return  DialectResolver .getDialect (operations .getJdbcOperations ());
250200	}
251201
@@ -286,16 +236,7 @@ protected Set<Class<?>> getInitialEntitySet() throws ClassNotFoundException {
286236	 * @return a set of classes identified as entities. 
287237	 * @since 3.0 
288238	 */ 
289- 	@ SuppressWarnings ("unchecked" )
290239	protected  Set <Class <?>> scanForEntities (String  basePackage ) {
291- 
292- 		if  (!StringUtils .hasText (basePackage )) {
293- 			return  Collections .emptySet ();
294- 		}
295- 
296- 		return  TypeScanner .typeScanner (AbstractJdbcConfiguration .class .getClassLoader ()) // 
297- 				.forTypesAnnotatedWith (Table .class ) // 
298- 				.scanPackages (basePackage ) // 
299- 				.collectAsSet ();
240+ 		return  JdbcConfiguration .scanForEntities (basePackage );
300241	}
301242}
0 commit comments