|
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