mirror of
https://github.com/spring-projects/spring-boot.git
synced 2024-08-29 03:06:45 +08:00
Upgrade to Hibernate 6.1.1.Final
This commit makes the following potentially breaking changes: - Dependency management for modules that do not exist in Hibernate 6.1 has been removed. - Hibernate's modules are now in the org.hibernate.orm group. Users not using the starter or using modules that are not in the starter will have to update their build configuration accordingly. - spring.jpa.hibernate.use-new-id-generator-mappings has been removed as Hibernate no longer supports switching back to the old ID generator mappings. Co-authored-by: Andy Wilkinson <wilkinsona@vmware.com> Closes gh-31674
This commit is contained in:
parent
beb40eaaf6
commit
b10c57551c
@ -107,7 +107,7 @@ dependencies {
|
|||||||
exclude group: "commons-logging", module: "commons-logging"
|
exclude group: "commons-logging", module: "commons-logging"
|
||||||
}
|
}
|
||||||
optional("org.flywaydb:flyway-core")
|
optional("org.flywaydb:flyway-core")
|
||||||
optional("org.hibernate:hibernate-core-jakarta")
|
optional("org.hibernate.orm:hibernate-core")
|
||||||
optional("org.hibernate.validator:hibernate-validator")
|
optional("org.hibernate.validator:hibernate-validator")
|
||||||
optional("org.influxdb:influxdb-java")
|
optional("org.influxdb:influxdb-java")
|
||||||
optional("org.liquibase:liquibase-core") {
|
optional("org.liquibase:liquibase-core") {
|
||||||
|
@ -102,10 +102,8 @@ dependencies {
|
|||||||
optional("org.flywaydb:flyway-core")
|
optional("org.flywaydb:flyway-core")
|
||||||
optional("org.flywaydb:flyway-sqlserver")
|
optional("org.flywaydb:flyway-sqlserver")
|
||||||
optional("org.freemarker:freemarker")
|
optional("org.freemarker:freemarker")
|
||||||
optional("org.hibernate:hibernate-core-jakarta")
|
optional("org.hibernate.orm:hibernate-core")
|
||||||
optional("org.hibernate:hibernate-jcache") {
|
optional("org.hibernate.orm:hibernate-jcache")
|
||||||
exclude group: "org.hibernate", module: "hibernate-core"
|
|
||||||
}
|
|
||||||
optional("org.hibernate.validator:hibernate-validator")
|
optional("org.hibernate.validator:hibernate-validator")
|
||||||
optional("org.influxdb:influxdb-java")
|
optional("org.influxdb:influxdb-java")
|
||||||
optional("org.jooq:jooq") {
|
optional("org.jooq:jooq") {
|
||||||
|
@ -53,13 +53,6 @@ public class HibernateProperties {
|
|||||||
*/
|
*/
|
||||||
private String ddlAuto;
|
private String ddlAuto;
|
||||||
|
|
||||||
/**
|
|
||||||
* Whether to use Hibernate's newer IdentifierGenerator for AUTO, TABLE and SEQUENCE.
|
|
||||||
* This is actually a shortcut for the "hibernate.id.new_generator_mappings" property.
|
|
||||||
* When not specified will default to "true".
|
|
||||||
*/
|
|
||||||
private Boolean useNewIdGeneratorMappings;
|
|
||||||
|
|
||||||
public String getDdlAuto() {
|
public String getDdlAuto() {
|
||||||
return this.ddlAuto;
|
return this.ddlAuto;
|
||||||
}
|
}
|
||||||
@ -68,14 +61,6 @@ public class HibernateProperties {
|
|||||||
this.ddlAuto = ddlAuto;
|
this.ddlAuto = ddlAuto;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean isUseNewIdGeneratorMappings() {
|
|
||||||
return this.useNewIdGeneratorMappings;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUseNewIdGeneratorMappings(Boolean useNewIdGeneratorMappings) {
|
|
||||||
this.useNewIdGeneratorMappings = useNewIdGeneratorMappings;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Naming getNaming() {
|
public Naming getNaming() {
|
||||||
return this.naming;
|
return this.naming;
|
||||||
}
|
}
|
||||||
@ -97,7 +82,6 @@ public class HibernateProperties {
|
|||||||
|
|
||||||
private Map<String, Object> getAdditionalProperties(Map<String, String> existing, HibernateSettings settings) {
|
private Map<String, Object> getAdditionalProperties(Map<String, String> existing, HibernateSettings settings) {
|
||||||
Map<String, Object> result = new HashMap<>(existing);
|
Map<String, Object> result = new HashMap<>(existing);
|
||||||
applyNewIdGeneratorMappings(result);
|
|
||||||
applyScanner(result);
|
applyScanner(result);
|
||||||
getNaming().applyNamingStrategies(result);
|
getNaming().applyNamingStrategies(result);
|
||||||
String ddlAuto = determineDdlAuto(existing, settings::getDdlAuto);
|
String ddlAuto = determineDdlAuto(existing, settings::getDdlAuto);
|
||||||
@ -114,15 +98,6 @@ public class HibernateProperties {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void applyNewIdGeneratorMappings(Map<String, Object> result) {
|
|
||||||
if (this.useNewIdGeneratorMappings != null) {
|
|
||||||
result.put(AvailableSettings.USE_NEW_ID_GENERATOR_MAPPINGS, this.useNewIdGeneratorMappings.toString());
|
|
||||||
}
|
|
||||||
else if (!result.containsKey(AvailableSettings.USE_NEW_ID_GENERATOR_MAPPINGS)) {
|
|
||||||
result.put(AvailableSettings.USE_NEW_ID_GENERATOR_MAPPINGS, "true");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void applyScanner(Map<String, Object> result) {
|
private void applyScanner(Map<String, Object> result) {
|
||||||
if (!result.containsKey(AvailableSettings.SCANNER) && ClassUtils.isPresent(DISABLED_SCANNER_CLASS, null)) {
|
if (!result.containsKey(AvailableSettings.SCANNER) && ClassUtils.isPresent(DISABLED_SCANNER_CLASS, null)) {
|
||||||
result.put(AvailableSettings.SCANNER, DISABLED_SCANNER_CLASS);
|
result.put(AvailableSettings.SCANNER, DISABLED_SCANNER_CLASS);
|
||||||
|
@ -1100,6 +1100,15 @@
|
|||||||
"name": "spring.groovy.template.suffix",
|
"name": "spring.groovy.template.suffix",
|
||||||
"defaultValue": ".tpl"
|
"defaultValue": ".tpl"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "spring.jpa.hibernate.use-new-id-generator-mappings",
|
||||||
|
"type": "java.lang.Boolean",
|
||||||
|
"description": "Whether to use Hibernate's newer IdentifierGenerator for AUTO, TABLE and SEQUENCE. This is actually a shortcut for the \"hibernate.id.new_generator_mappings\" property. When not specified will default to \"true\".",
|
||||||
|
"deprecation": {
|
||||||
|
"level": "error",
|
||||||
|
"reason": "Hibernate no longer supports disabling the use of new ID generator mappings."
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "spring.http.converters.preferred-json-mapper",
|
"name": "spring.http.converters.preferred-json-mapper",
|
||||||
"type": "java.lang.String",
|
"type": "java.lang.String",
|
||||||
|
@ -93,19 +93,6 @@ class HibernatePropertiesTests {
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
void useNewIdGeneratorMappingsDefault() {
|
|
||||||
this.contextRunner.run(assertHibernateProperties((hibernateProperties) -> assertThat(hibernateProperties)
|
|
||||||
.containsEntry(AvailableSettings.USE_NEW_ID_GENERATOR_MAPPINGS, "true")));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void useNewIdGeneratorMappingsFalse() {
|
|
||||||
this.contextRunner.withPropertyValues("spring.jpa.hibernate.use-new-id-generator-mappings:false")
|
|
||||||
.run(assertHibernateProperties((hibernateProperties) -> assertThat(hibernateProperties)
|
|
||||||
.containsEntry(AvailableSettings.USE_NEW_ID_GENERATOR_MAPPINGS, "false")));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void scannerUsesDisabledScannerByDefault() {
|
void scannerUsesDisabledScannerByDefault() {
|
||||||
this.contextRunner.run(assertHibernateProperties((hibernateProperties) -> assertThat(hibernateProperties)
|
this.contextRunner.run(assertHibernateProperties((hibernateProperties) -> assertThat(hibernateProperties)
|
||||||
|
@ -4,7 +4,8 @@ databaseChangeLog:
|
|||||||
author: dsyer
|
author: dsyer
|
||||||
changes:
|
changes:
|
||||||
- createSequence:
|
- createSequence:
|
||||||
sequenceName: hibernate_sequence
|
sequenceName: city_seq
|
||||||
|
incrementBy: 50
|
||||||
- createTable:
|
- createTable:
|
||||||
tableName: city
|
tableName: city
|
||||||
columns:
|
columns:
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
CREATE SEQUENCE HIBERNATE_SEQUENCE;
|
CREATE SEQUENCE city_seq INCREMENT BY 50;
|
||||||
|
|
||||||
CREATE TABLE CITY (
|
CREATE TABLE CITY (
|
||||||
id BIGINT GENERATED BY DEFAULT AS IDENTITY,
|
id BIGINT GENERATED BY DEFAULT AS IDENTITY,
|
||||||
|
@ -353,22 +353,23 @@ bom {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
library("Hibernate", "5.6.10.Final") {
|
library("Hibernate", "6.1.1.Final") {
|
||||||
group("org.hibernate") {
|
group("org.hibernate.orm") {
|
||||||
modules = [
|
modules = [
|
||||||
|
"hibernate-agroal",
|
||||||
|
"hibernate-ant",
|
||||||
"hibernate-c3p0",
|
"hibernate-c3p0",
|
||||||
"hibernate-core-jakarta",
|
"hibernate-community-dialects",
|
||||||
"hibernate-ehcache",
|
"hibernate-core",
|
||||||
"hibernate-entitymanager",
|
"hibernate-envers",
|
||||||
"hibernate-envers-jakarta",
|
"hibernate-graalvm",
|
||||||
"hibernate-hikaricp",
|
"hibernate-hikaricp",
|
||||||
"hibernate-java8",
|
|
||||||
"hibernate-jcache",
|
"hibernate-jcache",
|
||||||
"hibernate-jpamodelgen-jakarta",
|
"hibernate-jpamodelgen",
|
||||||
"hibernate-micrometer",
|
"hibernate-micrometer",
|
||||||
"hibernate-proxool",
|
"hibernate-proxool",
|
||||||
"hibernate-spatial",
|
"hibernate-spatial",
|
||||||
"hibernate-testing-jakarta",
|
"hibernate-testing",
|
||||||
"hibernate-vibur"
|
"hibernate-vibur"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,7 @@ dependencies {
|
|||||||
optional("io.r2dbc:r2dbc-spi")
|
optional("io.r2dbc:r2dbc-spi")
|
||||||
optional("jakarta.servlet:jakarta.servlet-api")
|
optional("jakarta.servlet:jakarta.servlet-api")
|
||||||
optional("org.apache.derby:derbytools")
|
optional("org.apache.derby:derbytools")
|
||||||
optional("org.hibernate:hibernate-core-jakarta")
|
optional("org.hibernate.orm:hibernate-core")
|
||||||
optional("org.springframework:spring-jdbc")
|
optional("org.springframework:spring-jdbc")
|
||||||
optional("org.springframework:spring-orm")
|
optional("org.springframework:spring-orm")
|
||||||
optional("org.springframework:spring-web")
|
optional("org.springframework:spring-web")
|
||||||
|
@ -99,7 +99,7 @@ dependencies {
|
|||||||
implementation("org.assertj:assertj-core")
|
implementation("org.assertj:assertj-core")
|
||||||
implementation("org.cache2k:cache2k-spring")
|
implementation("org.cache2k:cache2k-spring")
|
||||||
implementation("org.apache.groovy:groovy")
|
implementation("org.apache.groovy:groovy")
|
||||||
implementation("org.hibernate:hibernate-jcache") {
|
implementation("org.hibernate.orm:hibernate-jcache") {
|
||||||
exclude group: "javax.activation", module: "javax.activation-api"
|
exclude group: "javax.activation", module: "javax.activation-api"
|
||||||
exclude group: "javax.persistence", module: "javax.persistence-api"
|
exclude group: "javax.persistence", module: "javax.persistence-api"
|
||||||
exclude group: "javax.xml.bind", module: "jaxb-api"
|
exclude group: "javax.xml.bind", module: "jaxb-api"
|
||||||
|
@ -246,7 +246,7 @@ See {spring-boot-autoconfigure-module-code}/orm/jpa/HibernateJpaAutoConfiguratio
|
|||||||
Hibernate {hibernate-docs}#caching[second-level cache] can be configured for a range of cache providers.
|
Hibernate {hibernate-docs}#caching[second-level cache] can be configured for a range of cache providers.
|
||||||
Rather than configuring Hibernate to lookup the cache provider again, it is better to provide the one that is available in the context whenever possible.
|
Rather than configuring Hibernate to lookup the cache provider again, it is better to provide the one that is available in the context whenever possible.
|
||||||
|
|
||||||
To do this with JCache, first make sure that `org.hibernate:hibernate-jcache` is available on the classpath.
|
To do this with JCache, first make sure that `org.hibernate.orm:hibernate-jcache` is available on the classpath.
|
||||||
Then, add a `HibernatePropertiesCustomizer` bean as shown in the following example:
|
Then, add a `HibernatePropertiesCustomizer` bean as shown in the following example:
|
||||||
|
|
||||||
include::code:MyHibernateSecondLevelCacheConfiguration[]
|
include::code:MyHibernateSecondLevelCacheConfiguration[]
|
||||||
|
@ -7,9 +7,7 @@ description = "Starter for using Spring Data JPA with Hibernate"
|
|||||||
dependencies {
|
dependencies {
|
||||||
api(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-aop"))
|
api(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-aop"))
|
||||||
api(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-jdbc"))
|
api(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-jdbc"))
|
||||||
api("org.hibernate:hibernate-core-jakarta") {
|
api("org.hibernate.orm:hibernate-core")
|
||||||
exclude group: "jakarta.activation", module: "jakarta.activation-api"
|
|
||||||
}
|
|
||||||
api("org.springframework.data:spring-data-jpa")
|
api("org.springframework.data:spring-data-jpa")
|
||||||
api("org.springframework:spring-aspects")
|
api("org.springframework:spring-aspects")
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,7 @@ dependencies {
|
|||||||
optional("net.sourceforge.htmlunit:htmlunit") {
|
optional("net.sourceforge.htmlunit:htmlunit") {
|
||||||
exclude group: "commons-logging", module: "commons-logging"
|
exclude group: "commons-logging", module: "commons-logging"
|
||||||
}
|
}
|
||||||
optional("org.hibernate:hibernate-core-jakarta")
|
optional("org.hibernate.orm:hibernate-core")
|
||||||
optional("org.junit.jupiter:junit-jupiter-api")
|
optional("org.junit.jupiter:junit-jupiter-api")
|
||||||
optional("org.seleniumhq.selenium:htmlunit-driver") {
|
optional("org.seleniumhq.selenium:htmlunit-driver") {
|
||||||
exclude group: "commons-logging", module: "commons-logging"
|
exclude group: "commons-logging", module: "commons-logging"
|
||||||
|
@ -72,7 +72,7 @@ dependencies {
|
|||||||
}
|
}
|
||||||
optional("org.flywaydb:flyway-core")
|
optional("org.flywaydb:flyway-core")
|
||||||
optional("org.hamcrest:hamcrest-library")
|
optional("org.hamcrest:hamcrest-library")
|
||||||
optional("org.hibernate:hibernate-core-jakarta")
|
optional("org.hibernate.orm:hibernate-core")
|
||||||
optional("org.hibernate.validator:hibernate-validator")
|
optional("org.hibernate.validator:hibernate-validator")
|
||||||
optional("org.jooq:jooq") {
|
optional("org.jooq:jooq") {
|
||||||
exclude(group: "javax.xml.bind", module: "jaxb-api")
|
exclude(group: "javax.xml.bind", module: "jaxb-api")
|
||||||
|
@ -10,12 +10,7 @@ dependencies {
|
|||||||
implementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-web"))
|
implementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-web"))
|
||||||
implementation("jakarta.persistence:jakarta.persistence-api")
|
implementation("jakarta.persistence:jakarta.persistence-api")
|
||||||
implementation("jakarta.xml.bind:jakarta.xml.bind-api")
|
implementation("jakarta.xml.bind:jakarta.xml.bind-api")
|
||||||
implementation("org.hibernate:hibernate-core-jakarta") {
|
implementation("org.hibernate.orm:hibernate-core")
|
||||||
exclude group: "javax.activation", module: "javax.activation-api"
|
|
||||||
exclude group: "javax.persistence", module: "javax.persistence-api"
|
|
||||||
exclude group: "javax.xml.bind", module: "jaxb-api"
|
|
||||||
exclude group: "org.jboss.spec.javax.transaction", module: "jboss-transaction-api_1.2_spec"
|
|
||||||
}
|
|
||||||
implementation("org.springframework:spring-orm")
|
implementation("org.springframework:spring-orm")
|
||||||
|
|
||||||
runtimeOnly("com.h2database:h2")
|
runtimeOnly("com.h2database:h2")
|
||||||
|
Loading…
Reference in New Issue
Block a user