|
28 | 28 |
|
29 | 29 | import org.apache.commons.logging.Log;
|
30 | 30 | import org.apache.commons.logging.LogFactory;
|
| 31 | +import org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy; |
31 | 32 | import org.hibernate.boot.model.naming.ImplicitNamingStrategy;
|
32 | 33 | import org.hibernate.boot.model.naming.PhysicalNamingStrategy;
|
33 | 34 | import org.hibernate.cfg.AvailableSettings;
|
34 | 35 |
|
| 36 | +import org.springframework.aot.hint.MemberCategory; |
| 37 | +import org.springframework.aot.hint.RuntimeHints; |
| 38 | +import org.springframework.aot.hint.RuntimeHintsRegistrar; |
| 39 | +import org.springframework.aot.hint.TypeHint; |
| 40 | +import org.springframework.aot.hint.TypeReference; |
35 | 41 | import org.springframework.beans.factory.ObjectProvider;
|
36 | 42 | import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
|
37 | 43 | import org.springframework.boot.autoconfigure.condition.ConditionalOnSingleCandidate;
|
| 44 | +import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration.HibernateRuntimeHints; |
38 | 45 | import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
39 | 46 | import org.springframework.boot.jdbc.SchemaManagementProvider;
|
40 | 47 | import org.springframework.boot.jdbc.metadata.CompositeDataSourcePoolMetadataProvider;
|
41 | 48 | import org.springframework.boot.jdbc.metadata.DataSourcePoolMetadata;
|
42 | 49 | import org.springframework.boot.jdbc.metadata.DataSourcePoolMetadataProvider;
|
| 50 | +import org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy; |
43 | 51 | import org.springframework.boot.orm.jpa.hibernate.SpringJtaPlatform;
|
44 | 52 | import org.springframework.context.annotation.Configuration;
|
| 53 | +import org.springframework.context.annotation.ImportRuntimeHints; |
45 | 54 | import org.springframework.jndi.JndiLocatorDelegate;
|
46 | 55 | import org.springframework.orm.hibernate5.SpringBeanContainer;
|
47 | 56 | import org.springframework.orm.jpa.vendor.AbstractJpaVendorAdapter;
|
|
57 | 66 | * @author Manuel Doninger
|
58 | 67 | * @author Andy Wilkinson
|
59 | 68 | * @author Stephane Nicoll
|
| 69 | + * @author Moritz Halbritter |
60 | 70 | */
|
61 | 71 | @Configuration(proxyBeanMethods = false)
|
62 | 72 | @EnableConfigurationProperties(HibernateProperties.class)
|
63 | 73 | @ConditionalOnSingleCandidate(DataSource.class)
|
| 74 | +@ImportRuntimeHints(HibernateRuntimeHints.class) |
64 | 75 | class HibernateJpaConfiguration extends JpaBaseConfiguration {
|
65 | 76 |
|
66 | 77 | private static final Log logger = LogFactory.getLog(HibernateJpaConfiguration.class);
|
@@ -237,4 +248,23 @@ public void customize(Map<String, Object> hibernateProperties) {
|
237 | 248 |
|
238 | 249 | }
|
239 | 250 |
|
| 251 | + static class HibernateRuntimeHints implements RuntimeHintsRegistrar { |
| 252 | + |
| 253 | + @Override |
| 254 | + public void registerHints(RuntimeHints hints, ClassLoader classLoader) { |
| 255 | + for (String clazz : NO_JTA_PLATFORM_CLASSES) { |
| 256 | + hints.reflection() |
| 257 | + .registerType(TypeReference.of(clazz), |
| 258 | + TypeHint.builtWith(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS)); |
| 259 | + } |
| 260 | + hints.reflection() |
| 261 | + .registerType(SpringImplicitNamingStrategy.class, |
| 262 | + TypeHint.builtWith(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS)); |
| 263 | + hints.reflection() |
| 264 | + .registerType(CamelCaseToUnderscoresNamingStrategy.class, |
| 265 | + TypeHint.builtWith(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS)); |
| 266 | + } |
| 267 | + |
| 268 | + } |
| 269 | + |
240 | 270 | }
|
0 commit comments