26
26
27
27
import javax .sql .DataSource ;
28
28
29
+ import org .jspecify .annotations .Nullable ;
30
+
29
31
import org .springframework .core .task .AsyncTaskExecutor ;
30
32
import org .springframework .orm .jpa .JpaVendorAdapter ;
31
33
import org .springframework .orm .jpa .LocalContainerEntityManagerFactoryBean ;
@@ -53,15 +55,15 @@ public class EntityManagerFactoryBuilder {
53
55
54
56
private final JpaVendorAdapter jpaVendorAdapter ;
55
57
56
- private final PersistenceUnitManager persistenceUnitManager ;
58
+ private final @ Nullable PersistenceUnitManager persistenceUnitManager ;
57
59
58
60
private final Function <DataSource , Map <String , ?>> jpaPropertiesFactory ;
59
61
60
- private final URL persistenceUnitRootLocation ;
62
+ private final @ Nullable URL persistenceUnitRootLocation ;
61
63
62
- private AsyncTaskExecutor bootstrapExecutor ;
64
+ private @ Nullable AsyncTaskExecutor bootstrapExecutor ;
63
65
64
- private PersistenceUnitPostProcessor [] persistenceUnitPostProcessors ;
66
+ private PersistenceUnitPostProcessor @ Nullable [] persistenceUnitPostProcessors ;
65
67
66
68
/**
67
69
* Create a new instance passing in the common pieces that will be shared if multiple
@@ -74,7 +76,8 @@ public class EntityManagerFactoryBuilder {
74
76
* @since 3.4.4
75
77
*/
76
78
public EntityManagerFactoryBuilder (JpaVendorAdapter jpaVendorAdapter ,
77
- Function <DataSource , Map <String , ?>> jpaPropertiesFactory , PersistenceUnitManager persistenceUnitManager ) {
79
+ Function <DataSource , Map <String , ?>> jpaPropertiesFactory ,
80
+ @ Nullable PersistenceUnitManager persistenceUnitManager ) {
78
81
this (jpaVendorAdapter , jpaPropertiesFactory , persistenceUnitManager , null );
79
82
}
80
83
@@ -91,8 +94,8 @@ public EntityManagerFactoryBuilder(JpaVendorAdapter jpaVendorAdapter,
91
94
* @since 3.4.4
92
95
*/
93
96
public EntityManagerFactoryBuilder (JpaVendorAdapter jpaVendorAdapter ,
94
- Function <DataSource , Map <String , ?>> jpaPropertiesFactory , PersistenceUnitManager persistenceUnitManager ,
95
- URL persistenceUnitRootLocation ) {
97
+ Function <DataSource , Map <String , ?>> jpaPropertiesFactory ,
98
+ @ Nullable PersistenceUnitManager persistenceUnitManager , @ Nullable URL persistenceUnitRootLocation ) {
96
99
this .jpaVendorAdapter = jpaVendorAdapter ;
97
100
this .persistenceUnitManager = persistenceUnitManager ;
98
101
this .jpaPropertiesFactory = jpaPropertiesFactory ;
@@ -137,15 +140,15 @@ public final class Builder {
137
140
138
141
private final DataSource dataSource ;
139
142
140
- private PersistenceManagedTypes managedTypes ;
143
+ private @ Nullable PersistenceManagedTypes managedTypes ;
141
144
142
- private String [] packagesToScan ;
145
+ private String @ Nullable [] packagesToScan ;
143
146
144
- private String persistenceUnit ;
147
+ private @ Nullable String persistenceUnit ;
145
148
146
149
private final Map <String , Object > properties = new HashMap <>();
147
150
148
- private String [] mappingResources ;
151
+ private String @ Nullable [] mappingResources ;
149
152
150
153
private boolean jta ;
151
154
@@ -159,7 +162,7 @@ private Builder(DataSource dataSource) {
159
162
* @param managedTypes managed types.
160
163
* @return the builder for fluent usage
161
164
*/
162
- public Builder managedTypes (PersistenceManagedTypes managedTypes ) {
165
+ public Builder managedTypes (@ Nullable PersistenceManagedTypes managedTypes ) {
163
166
this .managedTypes = managedTypes ;
164
167
return this ;
165
168
}
@@ -170,7 +173,7 @@ public Builder managedTypes(PersistenceManagedTypes managedTypes) {
170
173
* @return the builder for fluent usage
171
174
* @see #managedTypes(PersistenceManagedTypes)
172
175
*/
173
- public Builder packages (String ... packagesToScan ) {
176
+ public Builder packages (String @ Nullable ... packagesToScan ) {
174
177
this .packagesToScan = packagesToScan ;
175
178
return this ;
176
179
}
@@ -197,7 +200,7 @@ public Builder packages(Class<?>... basePackageClasses) {
197
200
* @param persistenceUnit the name of the persistence unit
198
201
* @return the builder for fluent usage
199
202
*/
200
- public Builder persistenceUnit (String persistenceUnit ) {
203
+ public Builder persistenceUnit (@ Nullable String persistenceUnit ) {
201
204
this .persistenceUnit = persistenceUnit ;
202
205
return this ;
203
206
}
@@ -223,7 +226,7 @@ public Builder properties(Map<String, ?> properties) {
223
226
* @param mappingResources the mapping resources to use
224
227
* @return the builder for fluent usage
225
228
*/
226
- public Builder mappingResources (String ... mappingResources ) {
229
+ public Builder mappingResources (String @ Nullable ... mappingResources ) {
227
230
this .mappingResources = mappingResources ;
228
231
return this ;
229
232
}
@@ -264,7 +267,7 @@ public LocalContainerEntityManagerFactoryBean build() {
264
267
entityManagerFactoryBean .setManagedTypes (this .managedTypes );
265
268
}
266
269
else {
267
- entityManagerFactoryBean . setPackagesToScan (this . packagesToScan );
270
+ setPackagesToScan (entityManagerFactoryBean );
268
271
}
269
272
Map <String , ?> jpaProperties = EntityManagerFactoryBuilder .this .jpaPropertiesFactory .apply (this .dataSource );
270
273
entityManagerFactoryBean .getJpaPropertyMap ().putAll (new LinkedHashMap <>(jpaProperties ));
@@ -286,6 +289,14 @@ public LocalContainerEntityManagerFactoryBean build() {
286
289
return entityManagerFactoryBean ;
287
290
}
288
291
292
+ // TODO: Review this. The test
293
+ // HibernateJpaAutoConfigurationTests.usesManuallyDefinedLocalContainerEntityManagerFactoryBeanUsingBuilder
294
+ // fails if an non-null assert is added
295
+ @ SuppressWarnings ("NullAway" )
296
+ private void setPackagesToScan (LocalContainerEntityManagerFactoryBean entityManagerFactoryBean ) {
297
+ entityManagerFactoryBean .setPackagesToScan (this .packagesToScan );
298
+ }
299
+
289
300
}
290
301
291
302
}
0 commit comments