|
30 | 30 |
|
31 | 31 | import javax.sql.DataSource;
|
32 | 32 |
|
| 33 | +import com.fasterxml.jackson.databind.ObjectMapper; |
33 | 34 | import com.zaxxer.hikari.HikariDataSource;
|
| 35 | +import jakarta.json.bind.Jsonb; |
| 36 | +import jakarta.json.bind.JsonbBuilder; |
34 | 37 | import jakarta.persistence.EntityManager;
|
35 | 38 | import jakarta.persistence.EntityManagerFactory;
|
36 | 39 | import jakarta.transaction.Synchronization;
|
|
40 | 43 | import org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy;
|
41 | 44 | import org.hibernate.boot.model.naming.ImplicitNamingStrategy;
|
42 | 45 | import org.hibernate.boot.model.naming.PhysicalNamingStrategy;
|
| 46 | +import org.hibernate.cfg.AvailableSettings; |
43 | 47 | import org.hibernate.cfg.ManagedBeanSettings;
|
44 | 48 | import org.hibernate.cfg.SchemaToolingSettings;
|
45 | 49 | import org.hibernate.dialect.H2Dialect;
|
46 | 50 | import org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform;
|
47 | 51 | import org.hibernate.engine.transaction.jta.platform.spi.JtaPlatform;
|
48 | 52 | import org.hibernate.internal.SessionFactoryImpl;
|
49 | 53 | import org.hibernate.jpa.HibernatePersistenceProvider;
|
| 54 | +import org.hibernate.type.format.jackson.JacksonJsonFormatMapper; |
| 55 | +import org.hibernate.type.format.jakartajson.JsonBJsonFormatMapper; |
50 | 56 | import org.junit.jupiter.api.Disabled;
|
51 | 57 | import org.junit.jupiter.api.Test;
|
52 | 58 |
|
|
59 | 65 | import org.springframework.boot.autoconfigure.AutoConfigurations;
|
60 | 66 | import org.springframework.boot.autoconfigure.TestAutoConfigurationPackage;
|
61 | 67 | import org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration;
|
| 68 | +import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration; |
62 | 69 | import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
|
63 | 70 | import org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration;
|
| 71 | +import org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration; |
64 | 72 | import org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration;
|
65 | 73 | import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfigurationTests.JpaUsingApplicationListenerConfiguration.EventCapturingApplicationListener;
|
66 | 74 | import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration.HibernateRuntimeHints;
|
@@ -387,6 +395,62 @@ void hibernatePropertiesCustomizerTakesPrecedenceOverStrategyInstancesAndNamingS
|
387 | 395 | });
|
388 | 396 | }
|
389 | 397 |
|
| 398 | + @Test |
| 399 | + void jacksonJsonFormatMapperHibernatePropertiesCustomizerUsedAutoConfiguredObjectMapper() { |
| 400 | + contextRunner().withPropertyValues("spring.jpa.hibernate.auto-configure.json-format-mapper=jackson") |
| 401 | + .withConfiguration(AutoConfigurations.of(JacksonAutoConfiguration.class)) |
| 402 | + .run(vendorProperties( |
| 403 | + (vendorProperties) -> assertThat(vendorProperties.get(AvailableSettings.JSON_FORMAT_MAPPER)) |
| 404 | + .isInstanceOf(JacksonJsonFormatMapper.class))); |
| 405 | + } |
| 406 | + |
| 407 | + @Test |
| 408 | + void jacksonJsonFormatMapperHibernatePropertiesCustomizerShouldNotBeRegisteredIfNoSingleCandidate() { |
| 409 | + contextRunner().withPropertyValues("spring.jpa.hibernate.auto-configure.json-format-mapper=jackson") |
| 410 | + .withBean("objectMapper1", ObjectMapper.class, ObjectMapper::new) |
| 411 | + .withBean("objectMapper2", ObjectMapper.class, ObjectMapper::new) |
| 412 | + .run(vendorProperties( |
| 413 | + (vendorProperties) -> assertThat(vendorProperties.get(AvailableSettings.JSON_FORMAT_MAPPER)) |
| 414 | + .isNull())); |
| 415 | + } |
| 416 | + |
| 417 | + @Test |
| 418 | + void jacksonJsonFormatMapperHibernatePropertiesCustomizerShouldNotBeRegistered() { |
| 419 | + contextRunner().withPropertyValues("spring.jpa.hibernate.auto-configure.json-format-mapper=none") |
| 420 | + .withConfiguration(AutoConfigurations.of(JacksonAutoConfiguration.class)) |
| 421 | + .run(vendorProperties( |
| 422 | + (vendorProperties) -> assertThat(vendorProperties.get(AvailableSettings.JSON_FORMAT_MAPPER)) |
| 423 | + .isNull())); |
| 424 | + } |
| 425 | + |
| 426 | + @Test |
| 427 | + void jsonbJsonFormatMapperHibernatePropertiesCustomizerUsedAutoConfiguredObjectMapper() { |
| 428 | + contextRunner().withPropertyValues("spring.jpa.hibernate.auto-configure.json-format-mapper=jsonb") |
| 429 | + .withConfiguration(AutoConfigurations.of(JsonbAutoConfiguration.class)) |
| 430 | + .run(vendorProperties( |
| 431 | + (vendorProperties) -> assertThat(vendorProperties.get(AvailableSettings.JSON_FORMAT_MAPPER)) |
| 432 | + .isInstanceOf(JsonBJsonFormatMapper.class))); |
| 433 | + } |
| 434 | + |
| 435 | + @Test |
| 436 | + void jsonbJsonFormatMapperHibernatePropertiesCustomizerShouldNotBeRegisteredIfNoSingleCandidate() { |
| 437 | + contextRunner().withPropertyValues("spring.jpa.hibernate.auto-configure.json-format-mapper=jsonb") |
| 438 | + .withBean("jsonb1", Jsonb.class, JsonbBuilder::create) |
| 439 | + .withBean("jsonb2", Jsonb.class, JsonbBuilder::create) |
| 440 | + .run(vendorProperties( |
| 441 | + (vendorProperties) -> assertThat(vendorProperties.get(AvailableSettings.JSON_FORMAT_MAPPER)) |
| 442 | + .isNull())); |
| 443 | + } |
| 444 | + |
| 445 | + @Test |
| 446 | + void jsonbJsonFormatMapperHibernatePropertiesCustomizerShouldNotBeRegistered() { |
| 447 | + contextRunner().withPropertyValues("spring.jpa.hibernate.auto-configure.json-format-mapper=none") |
| 448 | + .withConfiguration(AutoConfigurations.of(JsonbAutoConfiguration.class)) |
| 449 | + .run(vendorProperties( |
| 450 | + (vendorProperties) -> assertThat(vendorProperties.get(AvailableSettings.JSON_FORMAT_MAPPER)) |
| 451 | + .isNull())); |
| 452 | + } |
| 453 | + |
390 | 454 | @Test
|
391 | 455 | void eventListenerCanBeRegisteredAsBeans() {
|
392 | 456 | contextRunner().withUserConfiguration(TestInitializedJpaConfiguration.class)
|
|
0 commit comments