diff --git a/bom/application/pom.xml b/bom/application/pom.xml
index 83ffecb747466..e635fec888aa2 100644
--- a/bom/application/pom.xml
+++ b/bom/application/pom.xml
@@ -95,12 +95,12 @@
1.18.0
1.7.0
+ hibernate-search.version, antlr.version, bytebuddy.version -->
7.2.2.Final
1.0.0.Final
2.7.1
8.0.0.Final
- 8.18.2
+ 9.0.2
2.2.21
2.2.5.Final
2.2.2.SP01
@@ -1284,6 +1284,16 @@
quarkus-hibernate-orm-deployment
${project.version}
+
+ io.quarkus
+ quarkus-hibernate-orm-derby
+ ${project.version}
+
+
+ io.quarkus
+ quarkus-hibernate-orm-derby-deployment
+ ${project.version}
+
io.quarkus
quarkus-hibernate-envers
@@ -5474,13 +5484,6 @@
org.hibernate.orm
hibernate-core
${hibernate-orm.version}
-
-
-
- io.smallrye
- jandex
-
-
org.hibernate.orm
@@ -5492,6 +5495,11 @@
hibernate-envers
${hibernate-orm.version}
+
+ org.hibernate.orm
+ hibernate-processor
+ ${hibernate-orm.version}
+
org.hibernate.orm
hibernate-jpamodelgen
@@ -5506,9 +5514,9 @@
${hibernate-orm.version}
- org.hibernate.common
- hibernate-commons-annotations
- ${hibernate-commons-annotations.version}
+ org.hibernate.models
+ hibernate-models
+ ${hibernate-models.version}
org.hibernate.orm
@@ -5545,6 +5553,10 @@
io.smallrye
jandex
+
+ org.hibernate.models
+ hibernate-models-jandex
+
@@ -5569,6 +5581,10 @@
io.smallrye
jandex
+
+ org.hibernate.models
+ hibernate-models-jandex
+
@@ -5678,11 +5694,11 @@
co.elastic.clients
elasticsearch-java
${elasticsearch-opensource-components.version}
-
+
- org.apache.logging.log4j
- log4j-core
+ commons-logging
+ commons-logging
diff --git a/build-parent/pom.xml b/build-parent/pom.xml
index aef580f15bbaa..142d857c4f877 100644
--- a/build-parent/pom.xml
+++ b/build-parent/pom.xml
@@ -73,12 +73,12 @@
:Z
- 8.18.2
+ 9.0.2
docker.io/elastic/elasticsearch:${elasticsearch-server.version}
docker.io/elastic/logstash:${elasticsearch-server.version}
docker.io/elastic/kibana:${elasticsearch-server.version}
http
- 2.16.0
+ 3.0.0
docker.io/opensearchproject/opensearch:${opensearch-server.version}
http
2.2.0
diff --git a/devtools/bom-descriptor-json/pom.xml b/devtools/bom-descriptor-json/pom.xml
index 1d708f3aa6272..ad2740e7f6e00 100644
--- a/devtools/bom-descriptor-json/pom.xml
+++ b/devtools/bom-descriptor-json/pom.xml
@@ -850,6 +850,19 @@
+
+ io.quarkus
+ quarkus-hibernate-orm-derby
+ ${project.version}
+ pom
+ test
+
+
+ *
+ *
+
+
+
io.quarkus
quarkus-hibernate-orm-panache
diff --git a/docs/pom.xml b/docs/pom.xml
index f2a1e95944fd8..ca6182baba719 100644
--- a/docs/pom.xml
+++ b/docs/pom.xml
@@ -859,6 +859,19 @@
+
+ io.quarkus
+ quarkus-hibernate-orm-derby-deployment
+ ${project.version}
+ pom
+ test
+
+
+ *
+ *
+
+
+
io.quarkus
quarkus-hibernate-orm-panache-deployment
diff --git a/docs/src/main/asciidoc/hibernate-orm.adoc b/docs/src/main/asciidoc/hibernate-orm.adoc
index a8297e5bfe43b..582fbac318621 100644
--- a/docs/src/main/asciidoc/hibernate-orm.adoc
+++ b/docs/src/main/asciidoc/hibernate-orm.adoc
@@ -515,7 +515,7 @@ HibernateCriteriaBuilder hibernateCriteriaBuilder;
Metamodel metamodel;
@Inject
-Cache cache;
+jakarta.persistence.Cache cache;
@Inject
org.hibernate.Cache cache;
@@ -523,6 +523,9 @@ org.hibernate.Cache cache;
@Inject
jakarta.persistence.PersistenceUnitUtil persistenceUnitUtil;
+@Inject
+jakarta.persistence.SchemaManager schemaManager;
+
@Inject
org.hibernate.relational.SchemaManager schemaManager;
----
@@ -1692,8 +1695,8 @@ section of the Hibernate Validator guide for more details.
== Static metamodel and Jakarta Data
Both static metamodel and Jakarta Data capabilities of Hibernate ORM are available in Quarkus
-through the `hibernate-jpamodelgen` annotation processor. Since it is an annotation processor,
-you must configure the annotation processor in your build tool:
+through the `hibernate-processor` annotation processor. Since it is an annotation processor,
+you must configure it accordingly in your build tool:
[source,xml,role="primary asciidoc-tabs-target-sync-cli asciidoc-tabs-target-sync-maven"]
.pom.xml
@@ -1704,7 +1707,7 @@ you must configure the annotation processor in your build tool:
org.hibernate.orm
- hibernate-jpamodelgen
+ hibernate-processor
@@ -1718,9 +1721,9 @@ you must configure the annotation processor in your build tool:
.build.gradle
----
// Enforce the version management of your annotation processor dependencies,
-// so that there's no need to define an explicit version of the hibernate-jpamodelgen
+// so that there's no need to define an explicit version of the hibernate-processor
annotationProcessor enforcedPlatform("${quarkusPlatformGroupId}:${quarkusPlatformArtifactId}:${quarkusPlatformVersion}")
-annotationProcessor 'org.hibernate.orm:hibernate-jpamodelgen'
+annotationProcessor 'org.hibernate.orm:hibernate-processor'
----
=== Static metamodel
@@ -1757,7 +1760,7 @@ For a more detailed overview of static metamodel, please refer to the link:{jaka
=== Jakarta Data
-Jakarta Data requires, besides having the `hibernate-jpamodelgen` annotation processor in place, one extra dependency to be added:
+Jakarta Data requires, besides having the `hibernate-processor` annotation processor in place, one extra dependency to be added:
[source,xml,role="primary asciidoc-tabs-target-sync-cli asciidoc-tabs-target-sync-maven"]
.pom.xml
diff --git a/docs/src/main/asciidoc/hibernate-search-orm-elasticsearch.adoc b/docs/src/main/asciidoc/hibernate-search-orm-elasticsearch.adoc
index 330b67b188db3..521d7a0391385 100644
--- a/docs/src/main/asciidoc/hibernate-search-orm-elasticsearch.adoc
+++ b/docs/src/main/asciidoc/hibernate-search-orm-elasticsearch.adoc
@@ -631,7 +631,7 @@ quarkus.datasource.db-kind=postgresql <1>
quarkus.hibernate-orm.sql-load-script=import.sql <2>
-quarkus.hibernate-search-orm.elasticsearch.version=8 <3>
+quarkus.hibernate-search-orm.elasticsearch.version=9 <3>
quarkus.hibernate-search-orm.indexing.plan.synchronization.strategy=sync <4>
%prod.quarkus.datasource.jdbc.url=jdbc:postgresql://localhost/quarkus_test
@@ -820,7 +820,7 @@ as shown below.
[source,properties]
----
-quarkus.hibernate-search-orm.elasticsearch.version=opensearch:2.16
+quarkus.hibernate-search-orm.elasticsearch.version=opensearch:3.0
----
All other configuration options and APIs are exactly the same as with Elasticsearch.
@@ -850,7 +850,7 @@ quarkus.datasource.db-kind=h2
quarkus.datasource.jdbc.url=jdbc:h2:mem:default;DB_CLOSE_DELAY=-1
quarkus.hibernate-search-orm.elasticsearch.hosts=es1.mycompany.com:9200
-quarkus.hibernate-search-orm.elasticsearch.version=8
+quarkus.hibernate-search-orm.elasticsearch.version=9
----
Using a map based approach, it is also possible to configure named persistence units:
@@ -870,10 +870,10 @@ quarkus.hibernate-orm."inventory".datasource=inventory <4>
quarkus.hibernate-orm."inventory".packages=org.acme.model.inventory
quarkus.hibernate-search-orm."users".elasticsearch.hosts=es1.mycompany.com:9200 <5>
-quarkus.hibernate-search-orm."users".elasticsearch.version=8
+quarkus.hibernate-search-orm."users".elasticsearch.version=9
quarkus.hibernate-search-orm."inventory".elasticsearch.hosts=es2.mycompany.com:9200 <6>
-quarkus.hibernate-search-orm."inventory".elasticsearch.version=8
+quarkus.hibernate-search-orm."inventory".elasticsearch.version=9
----
<1> Define a datasource named `users`.
<2> Define a datasource named `inventory`.
diff --git a/docs/src/main/asciidoc/hibernate-search-standalone-elasticsearch.adoc b/docs/src/main/asciidoc/hibernate-search-standalone-elasticsearch.adoc
index fc4f742d8c1c1..3763e4c208b3a 100644
--- a/docs/src/main/asciidoc/hibernate-search-standalone-elasticsearch.adoc
+++ b/docs/src/main/asciidoc/hibernate-search-standalone-elasticsearch.adoc
@@ -560,7 +560,7 @@ Edit `src/main/resources/application.properties` and inject the following config
[source,properties]
----
quarkus.hibernate-search-standalone.mapping.structure=document <1>
-quarkus.hibernate-search-standalone.elasticsearch.version=8 <2>
+quarkus.hibernate-search-standalone.elasticsearch.version=9 <2>
quarkus.hibernate-search-standalone.indexing.plan.synchronization.strategy=sync <3>
%prod.quarkus.hibernate-search-standalone.elasticsearch.hosts=localhost:9200 <4>
@@ -738,7 +738,7 @@ as shown below.
[source,properties]
----
-quarkus.hibernate-search-standalone.elasticsearch.version=opensearch:2.16
+quarkus.hibernate-search-standalone.elasticsearch.version=opensearch:3.0
----
All other configuration options and APIs are exactly the same as with Elasticsearch.
diff --git a/extensions/elasticsearch-rest-client/runtime/src/main/java/io/quarkus/elasticsearch/restclient/lowlevel/runtime/ElasticsearchConfig.java b/extensions/elasticsearch-rest-client/runtime/src/main/java/io/quarkus/elasticsearch/restclient/lowlevel/runtime/ElasticsearchConfig.java
index 6b4ccf0fc04dd..8ea7623d5918b 100644
--- a/extensions/elasticsearch-rest-client/runtime/src/main/java/io/quarkus/elasticsearch/restclient/lowlevel/runtime/ElasticsearchConfig.java
+++ b/extensions/elasticsearch-rest-client/runtime/src/main/java/io/quarkus/elasticsearch/restclient/lowlevel/runtime/ElasticsearchConfig.java
@@ -53,13 +53,13 @@ public interface ElasticsearchConfig {
/**
* The maximum number of connections to all the Elasticsearch servers.
*/
- @WithDefault("20")
+ @WithDefault("40")
int maxConnections();
/**
* The maximum number of connections per Elasticsearch server.
*/
- @WithDefault("10")
+ @WithDefault("20")
int maxConnectionsPerRoute();
/**
diff --git a/extensions/hibernate-envers/deployment/src/main/java/io/quarkus/hibernate/envers/deployment/HibernateEnversProcessor.java b/extensions/hibernate-envers/deployment/src/main/java/io/quarkus/hibernate/envers/deployment/HibernateEnversProcessor.java
index 563904a20ef67..6bba52a0c2a0b 100644
--- a/extensions/hibernate-envers/deployment/src/main/java/io/quarkus/hibernate/envers/deployment/HibernateEnversProcessor.java
+++ b/extensions/hibernate-envers/deployment/src/main/java/io/quarkus/hibernate/envers/deployment/HibernateEnversProcessor.java
@@ -29,15 +29,21 @@ public final class HibernateEnversProcessor {
List addJpaModelClasses() {
return Arrays.asList(
new AdditionalJpaModelBuildItem("org.hibernate.envers.DefaultRevisionEntity"),
- new AdditionalJpaModelBuildItem("org.hibernate.envers.DefaultTrackingModifiedEntitiesRevisionEntity"));
+ new AdditionalJpaModelBuildItem("org.hibernate.envers.DefaultTrackingModifiedEntitiesRevisionEntity"),
+ new AdditionalJpaModelBuildItem("org.hibernate.envers.RevisionMapping"),
+ new AdditionalJpaModelBuildItem("org.hibernate.envers.TrackingModifiedEntitiesRevisionMapping"));
}
@BuildStep
public void registerEnversReflections(BuildProducer reflectiveClass,
HibernateEnversBuildTimeConfig buildTimeConfig) {
+ // This is necessary because these classes are added to the model conditionally at static init,
+ // so they don't get processed by HibernateOrmProcessor and in particular don't get reflection enabled.
reflectiveClass.produce(ReflectiveClassBuildItem.builder(
"org.hibernate.envers.DefaultRevisionEntity",
- "org.hibernate.envers.DefaultTrackingModifiedEntitiesRevisionEntity")
+ "org.hibernate.envers.DefaultTrackingModifiedEntitiesRevisionEntity",
+ "org.hibernate.envers.RevisionMapping",
+ "org.hibernate.envers.TrackingModifiedEntitiesRevisionMapping")
.reason(getClass().getName())
.methods().build());
diff --git a/extensions/hibernate-orm-derby/deployment/pom.xml b/extensions/hibernate-orm-derby/deployment/pom.xml
new file mode 100644
index 0000000000000..348387d604fc0
--- /dev/null
+++ b/extensions/hibernate-orm-derby/deployment/pom.xml
@@ -0,0 +1,60 @@
+
+
+
+ quarkus-hibernate-orm-derby-parent
+ io.quarkus
+ 999-SNAPSHOT
+
+ 4.0.0
+
+ quarkus-hibernate-orm-derby-deployment
+ Quarkus - Hibernate ORM - Derby - Deployment
+ This extensions is added by Quarkus automatically when quarkus-hibernate-orm and quarkus-jdbc-derby are on the classpath
+
+
+
+ io.quarkus
+ quarkus-core-deployment
+
+
+
+ io.quarkus
+ quarkus-hibernate-orm-deployment-spi
+
+
+ io.quarkus
+ quarkus-datasource-common
+
+
+
+ io.quarkus
+ quarkus-hibernate-orm-derby
+
+
+
+
+
+
+ maven-compiler-plugin
+
+
+ default-compile
+
+
+
+ io.quarkus
+ quarkus-extension-processor
+ ${project.version}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/extensions/hibernate-orm-derby/deployment/src/main/java/HibernateOrmDerbyProcessor.java b/extensions/hibernate-orm-derby/deployment/src/main/java/HibernateOrmDerbyProcessor.java
new file mode 100644
index 0000000000000..c2e9cccb5e0dc
--- /dev/null
+++ b/extensions/hibernate-orm-derby/deployment/src/main/java/HibernateOrmDerbyProcessor.java
@@ -0,0 +1,22 @@
+import java.util.Set;
+
+import org.hibernate.community.dialect.CommunityDialectResolver;
+import org.hibernate.engine.jdbc.dialect.spi.DialectResolver;
+
+import io.quarkus.datasource.common.runtime.DatabaseKind;
+import io.quarkus.deployment.annotations.BuildStep;
+import io.quarkus.deployment.builditem.nativeimage.ServiceProviderBuildItem;
+import io.quarkus.hibernate.orm.deployment.spi.DatabaseKindDialectBuildItem;
+
+public final class HibernateOrmDerbyProcessor {
+ @BuildStep
+ public DatabaseKindDialectBuildItem registerHibernateOrmMetadataForDerbyDialect() {
+ return DatabaseKindDialectBuildItem.forCoreDialect(DatabaseKind.DERBY, "Apache Derby",
+ Set.of("org.hibernate.community.dialect.DerbyDialect"));
+ }
+
+ @BuildStep
+ public ServiceProviderBuildItem registerCommunityDialectResolver() {
+ return new ServiceProviderBuildItem(DialectResolver.class.getName(), CommunityDialectResolver.class.getName());
+ }
+}
diff --git a/extensions/hibernate-orm-derby/pom.xml b/extensions/hibernate-orm-derby/pom.xml
new file mode 100644
index 0000000000000..a381ea0a21d8c
--- /dev/null
+++ b/extensions/hibernate-orm-derby/pom.xml
@@ -0,0 +1,21 @@
+
+
+
+
+ quarkus-extensions-parent
+ io.quarkus
+ 999-SNAPSHOT
+ ../pom.xml
+
+ 4.0.0
+
+ quarkus-hibernate-orm-derby-parent
+ Quarkus - Hibernate ORM - Derby - Deployment
+ pom
+
+ runtime
+ deployment
+
+
diff --git a/extensions/hibernate-orm-derby/runtime/pom.xml b/extensions/hibernate-orm-derby/runtime/pom.xml
new file mode 100644
index 0000000000000..9c6938794e485
--- /dev/null
+++ b/extensions/hibernate-orm-derby/runtime/pom.xml
@@ -0,0 +1,68 @@
+
+
+
+ quarkus-hibernate-orm-derby-parent
+ io.quarkus
+ 999-SNAPSHOT
+
+ 4.0.0
+
+ quarkus-hibernate-orm-derby
+ Quarkus - Hibernate ORM - Derby - Deployment
+ This extensions is added by Quarkus automatically when quarkus-hibernate-orm and quarkus-jdbc-derby are on the classpath
+
+
+
+ io.quarkus
+ quarkus-core
+
+
+ org.hibernate.orm
+ hibernate-community-dialects
+
+
+
+
+
+
+ io.quarkus
+ quarkus-extension-maven-plugin
+
+
+ compile
+
+ extension-descriptor
+
+
+ ${project.groupId}:${project.artifactId}-deployment:${project.version}
+
+ io.quarkus:quarkus-jdbc-derby
+
+
+
+
+
+
+ maven-compiler-plugin
+
+
+ default-compile
+
+
+
+ io.quarkus
+ quarkus-extension-processor
+ ${project.version}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/extensions/hibernate-orm-derby/runtime/src/main/resources/META-INF/quarkus-extension.yaml b/extensions/hibernate-orm-derby/runtime/src/main/resources/META-INF/quarkus-extension.yaml
new file mode 100644
index 0000000000000..0ae1a6c04092e
--- /dev/null
+++ b/extensions/hibernate-orm-derby/runtime/src/main/resources/META-INF/quarkus-extension.yaml
@@ -0,0 +1,6 @@
+name: Quarkus Hibernate ORM Derby
+artifact: ${project.groupId}:${project.artifactId}:${project.version}
+description: Conditional extension added when Hibernate ORM and the Derby JDBC driver are present
+metadata:
+ unlisted: true
+
diff --git a/extensions/hibernate-orm/deployment-spi/src/main/java/io/quarkus/hibernate/orm/deployment/spi/DatabaseKindDialectBuildItem.java b/extensions/hibernate-orm/deployment-spi/src/main/java/io/quarkus/hibernate/orm/deployment/spi/DatabaseKindDialectBuildItem.java
index 0087e4334b4f7..7e924ed3d8789 100644
--- a/extensions/hibernate-orm/deployment-spi/src/main/java/io/quarkus/hibernate/orm/deployment/spi/DatabaseKindDialectBuildItem.java
+++ b/extensions/hibernate-orm/deployment-spi/src/main/java/io/quarkus/hibernate/orm/deployment/spi/DatabaseKindDialectBuildItem.java
@@ -19,6 +19,8 @@ public final class DatabaseKindDialectBuildItem extends MultiBuildItem {
* @param dbKind The DB Kind set through {@code quarkus.datasource.db-kind}
* @param databaseProductName The corresponding database-product-name to set in Hibernate ORM.
* See {@code org.hibernate.dialect.Database} for information on how this name is resolved to a dialect.
+ * Also works with {@code org.hibernate.community.dialect.CommunityDatabase} if
+ * {@code hibernate-community-dialects} is in the classpath.
* @param dialects The corresponding dialects in Hibernate ORM,
* to detect the dbKind when using database multi-tenancy.
*/
@@ -32,6 +34,8 @@ public static DatabaseKindDialectBuildItem forCoreDialect(String dbKind, String
* @param dbKind The DB Kind set through {@code quarkus.datasource.db-kind}
* @param databaseProductName The corresponding database-product-name to set in Hibernate ORM.
* See {@code org.hibernate.dialect.Database} for information on how this name is resolved to a dialect.
+ * Also works with {@code org.hibernate.community.dialect.CommunityDatabase} if
+ * {@code hibernate-community-dialects} is in the classpath.
* @param dialects The corresponding dialects in Hibernate ORM,
* to detect the dbKind when using database multi-tenancy.
* @param defaultDatabaseProductVersion The default database-product-version to set in Hibernate ORM.
diff --git a/extensions/hibernate-orm/deployment/pom.xml b/extensions/hibernate-orm/deployment/pom.xml
index e17abfe0a5389..f54d4fbcdf3bd 100644
--- a/extensions/hibernate-orm/deployment/pom.xml
+++ b/extensions/hibernate-orm/deployment/pom.xml
@@ -53,6 +53,12 @@
io.quarkus
quarkus-vertx-http-dev-ui-spi
+
+ io.quarkus
+ quarkus-hibernate-orm-derby-deployment
+ true
+
+
io.quarkus
quarkus-junit5-internal
diff --git a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/ClassNames.java b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/ClassNames.java
index 6ac2d186c0202..110e37540eab2 100644
--- a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/ClassNames.java
+++ b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/ClassNames.java
@@ -44,7 +44,6 @@ private static DotName createConstant(String fqcn) {
public static final DotName EMBEDDED = createConstant("jakarta.persistence.Embedded");
public static final DotName EMBEDDED_ID = createConstant("jakarta.persistence.EmbeddedId");
public static final DotName ELEMENT_COLLECTION = createConstant("jakarta.persistence.ElementCollection");
- public static final DotName PROXY = createConstant("org.hibernate.annotations.Proxy");
public static final DotName HIBERNATE_PROXY = createConstant("org.hibernate.proxy.HibernateProxy");
public static final DotName TYPE = createConstant("org.hibernate.annotations.Type");
public static final DotName INJECT_SERVICE = createConstant("org.hibernate.service.spi.InjectService");
@@ -57,7 +56,8 @@ private static DotName createConstant(String fqcn) {
public static final DotName HIBERNATE_CRITERIA_BUILDER = createConstant(
"org.hibernate.query.criteria.HibernateCriteriaBuilder");
public static final DotName METAMODEL = createConstant("jakarta.persistence.metamodel.Metamodel");
- public static final DotName SCHEMA_MANAGER = createConstant("org.hibernate.relational.SchemaManager");
+ public static final DotName SCHEMA_MANAGER = createConstant("jakarta.persistence.SchemaManager");
+ public static final DotName HIBERNATE_SCHEMA_MANAGER = createConstant("org.hibernate.relational.SchemaManager");
public static final DotName CACHE = createConstant("jakarta.persistence.Cache");
public static final DotName HIBERNATE_CACHE = createConstant("org.hibernate.Cache");
public static final DotName PERSISTENCE_UNIT_UTIL = createConstant("jakarta.persistence.PersistenceUnitUtil");
@@ -69,6 +69,7 @@ private static DotName createConstant(String fqcn) {
public static final DotName XML_FORMAT = createConstant("io.quarkus.hibernate.orm.XmlFormat");
public static final List GENERATORS = List.of(
+ createConstant("org.hibernate.generator.Assigned"),
createConstant("org.hibernate.generator.internal.CurrentTimestampGeneration"),
createConstant("org.hibernate.generator.internal.GeneratedAlwaysGeneration"),
createConstant("org.hibernate.generator.internal.GeneratedGeneration"),
@@ -81,17 +82,39 @@ private static DotName createConstant(String fqcn) {
createConstant("org.hibernate.id.GUIDGenerator"),
createConstant("org.hibernate.id.IdentityGenerator"),
createConstant("org.hibernate.id.IncrementGenerator"),
+ createConstant("org.hibernate.id.NativeGenerator"),
createConstant("org.hibernate.id.SelectGenerator"),
createConstant("org.hibernate.id.UUIDGenerator"),
createConstant("org.hibernate.id.UUIDHexGenerator"),
createConstant("org.hibernate.id.enhanced.SequenceStyleGenerator"),
createConstant("org.hibernate.id.enhanced.TableGenerator"),
createConstant("org.hibernate.id.uuid.UuidGenerator"),
- createConstant("org.hibernate.tuple.CreationTimestampGeneration"),
- createConstant("org.hibernate.tuple.UpdateTimestampGeneration"),
- createConstant("org.hibernate.tuple.VmValueGeneration"));
+ createConstant("org.hibernate.tuple.entity.CompositeGeneratorBuilder$CompositeBeforeExecutionGenerator"),
+ createConstant("org.hibernate.tuple.entity.CompositeGeneratorBuilder$CompositeOnExecutionGenerator"),
+ createConstant("org.hibernate.tuple.entity.CompositeGeneratorBuilder$DummyGenerator"));
+
+ public static final List OPTIMIZERS = List.of(
+ createConstant("org.hibernate.id.enhanced.HiLoOptimizer"),
+ createConstant("org.hibernate.id.enhanced.LegacyHiLoAlgorithmOptimizer"),
+ createConstant("org.hibernate.id.enhanced.NoopOptimizer"),
+ createConstant("org.hibernate.id.enhanced.PooledLoOptimizer"),
+ createConstant("org.hibernate.id.enhanced.PooledLoThreadLocalOptimizer"),
+ createConstant("org.hibernate.id.enhanced.PooledOptimizer"));
+
+ // Only including naming strategies that will for sure be in every native binary and be instantiated at runtime.
+ // PhysicalNamingStrategy and ImplicitNamingStrategy implementations,
+ // in particular, are instantiated at static init.
+ // ImplicitDatabaseObjectNamingStrategy cannot be overridden through supported settings in Quarkus ATM,
+ // so we're left with only the default (and the legacy one for ORM 5.6 compatibility).
+ public static final List NAMING_STRATEGIES = List.of(
+ createConstant("org.hibernate.id.enhanced.LegacyNamingStrategy"),
+ createConstant("org.hibernate.id.enhanced.StandardNamingStrategy"));
public static final List PACKAGE_ANNOTATIONS = List.of(
+ createConstant("jakarta.persistence.SequenceGenerator"),
+ createConstant("jakarta.persistence.SequenceGenerators"),
+ createConstant("jakarta.persistence.TableGenerator"),
+ createConstant("jakarta.persistence.TableGenerators"),
createConstant("org.hibernate.annotations.CollectionTypeRegistration"),
createConstant("org.hibernate.annotations.CompositeTypeRegistration"),
createConstant("org.hibernate.annotations.CompositeTypeRegistrations"),
@@ -114,10 +137,13 @@ private static DotName createConstant(String fqcn) {
createConstant("org.hibernate.annotations.JdbcTypeRegistration"),
createConstant("org.hibernate.annotations.JdbcTypeRegistrations"),
createConstant("org.hibernate.annotations.ListIndexBase"),
+ createConstant("org.hibernate.annotations.NamedEntityGraph"),
+ createConstant("org.hibernate.annotations.NamedEntityGraphs"),
createConstant("org.hibernate.annotations.NamedNativeQueries"),
createConstant("org.hibernate.annotations.NamedNativeQuery"),
createConstant("org.hibernate.annotations.NamedQueries"),
createConstant("org.hibernate.annotations.NamedQuery"),
+ createConstant("org.hibernate.annotations.NativeGenerator"),
createConstant("org.hibernate.annotations.SoftDelete"),
createConstant("org.hibernate.annotations.TypeRegistration"),
createConstant("org.hibernate.annotations.TypeRegistrations"));
@@ -130,6 +156,7 @@ private static DotName createConstant(String fqcn) {
createConstant("jakarta.persistence.AttributeOverrides"),
createConstant("jakarta.persistence.Basic"),
createConstant("jakarta.persistence.Cacheable"),
+ createConstant("jakarta.persistence.CheckConstraint"),
createConstant("jakarta.persistence.CollectionTable"),
createConstant("jakarta.persistence.Column"),
createConstant("jakarta.persistence.ColumnResult"),
@@ -143,6 +170,7 @@ private static DotName createConstant(String fqcn) {
createConstant("jakarta.persistence.Embeddable"),
createConstant("jakarta.persistence.Embedded"),
createConstant("jakarta.persistence.EmbeddedId"),
+ createConstant("jakarta.persistence.EnumeratedValue"),
createConstant("jakarta.persistence.Entity"),
createConstant("jakarta.persistence.EntityListeners"),
createConstant("jakarta.persistence.EntityResult"),
@@ -220,6 +248,7 @@ private static DotName createConstant(String fqcn) {
createConstant("org.hibernate.annotations.AnyDiscriminator"),
createConstant("org.hibernate.annotations.AnyDiscriminatorValue"),
createConstant("org.hibernate.annotations.AnyDiscriminatorValues"),
+ createConstant("org.hibernate.annotations.AnyDiscriminatorImplicitValues"),
createConstant("org.hibernate.annotations.AnyKeyJavaClass"),
createConstant("org.hibernate.annotations.AnyKeyJavaType"),
createConstant("org.hibernate.annotations.AnyKeyJdbcType"),
@@ -235,6 +264,7 @@ private static DotName createConstant(String fqcn) {
createConstant("org.hibernate.annotations.Checks"),
createConstant("org.hibernate.annotations.Collate"),
createConstant("org.hibernate.annotations.CollectionId"),
+ createConstant("org.hibernate.annotations.CollectionIdJavaClass"),
createConstant("org.hibernate.annotations.CollectionIdJavaType"),
createConstant("org.hibernate.annotations.CollectionIdJdbcType"),
createConstant("org.hibernate.annotations.CollectionIdJdbcTypeCode"),
@@ -273,8 +303,6 @@ private static DotName createConstant(String fqcn) {
createConstant("org.hibernate.annotations.DialectOverride$GeneratedColumns"),
createConstant("org.hibernate.annotations.DialectOverride$JoinFormula"),
createConstant("org.hibernate.annotations.DialectOverride$JoinFormulas"),
- createConstant("org.hibernate.annotations.DialectOverride$OrderBy"),
- createConstant("org.hibernate.annotations.DialectOverride$OrderBys"),
createConstant("org.hibernate.annotations.DialectOverride$OverridesAnnotation"),
createConstant("org.hibernate.annotations.DialectOverride$SQLDelete"),
createConstant("org.hibernate.annotations.DialectOverride$SQLDeleteAll"),
@@ -291,13 +319,12 @@ private static DotName createConstant(String fqcn) {
createConstant("org.hibernate.annotations.DialectOverride$SQLUpdate"),
createConstant("org.hibernate.annotations.DialectOverride$SQLUpdates"),
createConstant("org.hibernate.annotations.DialectOverride$Version"),
- createConstant("org.hibernate.annotations.DialectOverride$Where"),
- createConstant("org.hibernate.annotations.DialectOverride$Wheres"),
createConstant("org.hibernate.annotations.DiscriminatorFormula"),
createConstant("org.hibernate.annotations.DiscriminatorOptions"),
createConstant("org.hibernate.annotations.DynamicInsert"),
createConstant("org.hibernate.annotations.DynamicUpdate"),
createConstant("org.hibernate.annotations.EmbeddableInstantiator"),
+ createConstant("org.hibernate.annotations.EmbeddedColumnNaming"),
createConstant("org.hibernate.annotations.EmbeddableInstantiatorRegistration"),
createConstant("org.hibernate.annotations.EmbeddableInstantiatorRegistrations"),
createConstant("org.hibernate.annotations.Fetch"),
@@ -312,20 +339,16 @@ private static DotName createConstant(String fqcn) {
createConstant("org.hibernate.annotations.FilterJoinTable"),
createConstant("org.hibernate.annotations.FilterJoinTables"),
createConstant("org.hibernate.annotations.Filters"),
- createConstant("org.hibernate.annotations.ForeignKey"),
createConstant("org.hibernate.annotations.Formula"),
createConstant("org.hibernate.annotations.FractionalSeconds"),
createConstant("org.hibernate.annotations.Generated"),
createConstant("org.hibernate.annotations.GeneratedColumn"),
- createConstant("org.hibernate.annotations.GeneratorType"),
createConstant("org.hibernate.annotations.GenericGenerator"),
createConstant("org.hibernate.annotations.GenericGenerators"),
createConstant("org.hibernate.annotations.HQLSelect"),
createConstant("org.hibernate.annotations.IdGeneratorType"),
createConstant("org.hibernate.annotations.Immutable"),
createConstant("org.hibernate.annotations.Imported"),
- createConstant("org.hibernate.annotations.Index"),
- createConstant("org.hibernate.annotations.IndexColumn"),
createConstant("org.hibernate.annotations.Instantiator"),
createConstant("org.hibernate.annotations.JavaType"),
createConstant("org.hibernate.annotations.JavaTypeRegistration"),
@@ -337,14 +360,11 @@ private static DotName createConstant(String fqcn) {
createConstant("org.hibernate.annotations.JoinColumnOrFormula"),
createConstant("org.hibernate.annotations.JoinColumnsOrFormulas"),
createConstant("org.hibernate.annotations.JoinFormula"),
- createConstant("org.hibernate.annotations.LazyCollection"),
createConstant("org.hibernate.annotations.LazyGroup"),
- createConstant("org.hibernate.annotations.LazyToOne"),
createConstant("org.hibernate.annotations.ListIndexBase"),
createConstant("org.hibernate.annotations.ListIndexJavaType"),
createConstant("org.hibernate.annotations.ListIndexJdbcType"),
createConstant("org.hibernate.annotations.ListIndexJdbcTypeCode"),
- createConstant("org.hibernate.annotations.Loader"),
createConstant("org.hibernate.annotations.ManyToAny"),
createConstant("org.hibernate.annotations.MapKeyJavaType"),
createConstant("org.hibernate.annotations.MapKeyJdbcType"),
@@ -352,25 +372,25 @@ private static DotName createConstant(String fqcn) {
createConstant("org.hibernate.annotations.MapKeyMutability"),
createConstant("org.hibernate.annotations.MapKeyType"),
createConstant("org.hibernate.annotations.Mutability"),
+ createConstant("org.hibernate.annotations.NamedEntityGraph"),
+ createConstant("org.hibernate.annotations.NamedEntityGraphs"),
createConstant("org.hibernate.annotations.NamedNativeQueries"),
createConstant("org.hibernate.annotations.NamedNativeQuery"),
createConstant("org.hibernate.annotations.NamedQueries"),
createConstant("org.hibernate.annotations.NamedQuery"),
createConstant("org.hibernate.annotations.Nationalized"),
+ createConstant("org.hibernate.annotations.NativeGenerator"),
createConstant("org.hibernate.annotations.NaturalId"),
createConstant("org.hibernate.annotations.NaturalIdCache"),
createConstant("org.hibernate.annotations.NotFound"),
createConstant("org.hibernate.annotations.OnDelete"),
createConstant("org.hibernate.annotations.OptimisticLock"),
createConstant("org.hibernate.annotations.OptimisticLocking"),
- createConstant("org.hibernate.annotations.OrderBy"),
createConstant("org.hibernate.annotations.ParamDef"),
createConstant("org.hibernate.annotations.Parameter"),
createConstant("org.hibernate.annotations.Parent"),
createConstant("org.hibernate.annotations.PartitionKey"),
- createConstant("org.hibernate.annotations.Persister"),
- createConstant("org.hibernate.annotations.Polymorphism"),
- createConstant("org.hibernate.annotations.Proxy"),
+ createConstant("org.hibernate.annotations.PropertyRef"),
createConstant("org.hibernate.annotations.QueryCacheLayout"),
createConstant("org.hibernate.annotations.RowId"),
createConstant("org.hibernate.annotations.SQLDelete"),
@@ -386,7 +406,6 @@ private static DotName createConstant(String fqcn) {
createConstant("org.hibernate.annotations.SQLUpdates"),
createConstant("org.hibernate.annotations.SecondaryRow"),
createConstant("org.hibernate.annotations.SecondaryRows"),
- createConstant("org.hibernate.annotations.SelectBeforeUpdate"),
createConstant("org.hibernate.annotations.SoftDelete"),
createConstant("org.hibernate.annotations.SortComparator"),
createConstant("org.hibernate.annotations.SortNatural"),
@@ -395,9 +414,7 @@ private static DotName createConstant(String fqcn) {
createConstant("org.hibernate.annotations.Struct"),
createConstant("org.hibernate.annotations.Subselect"),
createConstant("org.hibernate.annotations.Synchronize"),
- createConstant("org.hibernate.annotations.Table"),
- createConstant("org.hibernate.annotations.Tables"),
- createConstant("org.hibernate.annotations.Target"),
+ createConstant("org.hibernate.annotations.TargetEmbeddable"),
createConstant("org.hibernate.annotations.TenantId"),
createConstant("org.hibernate.annotations.TimeZoneColumn"),
createConstant("org.hibernate.annotations.TimeZoneStorage"),
@@ -408,9 +425,7 @@ private static DotName createConstant(String fqcn) {
createConstant("org.hibernate.annotations.UpdateTimestamp"),
createConstant("org.hibernate.annotations.UuidGenerator"),
createConstant("org.hibernate.annotations.ValueGenerationType"),
- createConstant("org.hibernate.annotations.View"),
- createConstant("org.hibernate.annotations.Where"),
- createConstant("org.hibernate.annotations.WhereJoinTable"));
+ createConstant("org.hibernate.annotations.View"));
public static final List ANNOTATED_WITH_INJECT_SERVICE = List.of(
createConstant("org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl"));
@@ -463,9 +478,6 @@ private static DotName createConstant(String fqcn) {
createConstant("java.util.UUID"),
createConstant("java.lang.Void"));
- public static final List STANDARD_STACK_ELEMENT_TYPES = List.of(
- createConstant("org.hibernate.query.sqm.tree.select.SqmQueryPart"));
-
public static final DotName HIBERNATE_ORM_PROCESSOR = createConstant(
"io.quarkus.hibernate.orm.deployment.HibernateOrmProcessor");
diff --git a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/GraalVMFeatures.java b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/GraalVMFeatures.java
index d964cdae8694c..ffb3b15ad7452 100644
--- a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/GraalVMFeatures.java
+++ b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/GraalVMFeatures.java
@@ -1,6 +1,9 @@
package io.quarkus.hibernate.orm.deployment;
import static io.quarkus.hibernate.orm.deployment.ClassNames.GENERATORS;
+import static io.quarkus.hibernate.orm.deployment.ClassNames.OPTIMIZERS;
+
+import java.util.stream.Stream;
import org.jboss.jandex.DotName;
@@ -21,10 +24,12 @@ NativeImageFeatureBuildItem staticNativeImageFeature() {
return new NativeImageFeatureBuildItem("org.hibernate.graalvm.internal.GraalVMStaticFeature");
}
- // Workaround for https://hibernate.atlassian.net/browse/HHH-16439
+ // TODO try to limit registration to those that are actually needed, based on configuration + mapping.
+ // https://github.com/quarkusio/quarkus/pull/32433#issuecomment-1497615958
@BuildStep
- ReflectiveClassBuildItem registerGeneratorClassesForReflections() {
- return ReflectiveClassBuildItem.builder(GENERATORS.stream().map(DotName::toString).toArray(String[]::new))
+ ReflectiveClassBuildItem registerGeneratorAndOptimizerClassesForReflections() {
+ return ReflectiveClassBuildItem
+ .builder(Stream.concat(GENERATORS.stream(), OPTIMIZERS.stream()).map(DotName::toString).toArray(String[]::new))
.reason(ClassNames.GRAAL_VM_FEATURES.toString())
.build();
}
@@ -39,13 +44,12 @@ ReflectiveClassBuildItem registerJdbcArrayTypesForReflection() {
.build();
}
- // Workaround for https://hibernate.atlassian.net/browse/HHH-18875
- // See https://hibernate.zulipchat.com/#narrow/channel/132094-hibernate-orm-dev/topic/StandardStack.20and.20reflection
+ // Workaround for https://hibernate.atlassian.net/browse/HHH-18975
@BuildStep
- ReflectiveClassBuildItem registerStandardStackElementTypesForReflection() {
+ ReflectiveClassBuildItem registerNamingStrategiesForReflections() {
return ReflectiveClassBuildItem
- .builder(ClassNames.STANDARD_STACK_ELEMENT_TYPES.stream().map(d -> d.toString() + "[]").toArray(String[]::new))
- .reason("Workaround for https://hibernate.atlassian.net/browse/HHH-18875")
+ .builder(ClassNames.NAMING_STRATEGIES.stream().map(DotName::toString).toArray(String[]::new))
+ .reason(ClassNames.GRAAL_VM_FEATURES.toString())
.build();
}
diff --git a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmCdiProcessor.java b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmCdiProcessor.java
index 282c05f8a4e01..9d6df3a62133f 100644
--- a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmCdiProcessor.java
+++ b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmCdiProcessor.java
@@ -88,7 +88,8 @@ public class HibernateOrmCdiProcessor {
private static final List CRITERIA_BUILDER_EXPOSED_TYPES = List.of(ClassNames.CRITERIA_BUILDER,
ClassNames.HIBERNATE_CRITERIA_BUILDER);
private static final List METAMODEL_EXPOSED_TYPES = List.of(ClassNames.METAMODEL);
- private static final List SCHEMA_MANAGER_EXPOSED_TYPES = List.of(ClassNames.SCHEMA_MANAGER);
+ private static final List SCHEMA_MANAGER_EXPOSED_TYPES = List.of(ClassNames.SCHEMA_MANAGER,
+ ClassNames.HIBERNATE_SCHEMA_MANAGER);
private static final List CACHE_EXPOSED_TYPES = List.of(ClassNames.CACHE, ClassNames.HIBERNATE_CACHE);
private static final List PERSISTENCE_UNIT_UTIL_EXPOSED_TYPES = List.of(ClassNames.PERSISTENCE_UNIT_UTIL);
diff --git a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmProcessor.java b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmProcessor.java
index 85c6341a4e2b4..fa6e9757787d6 100644
--- a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmProcessor.java
+++ b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmProcessor.java
@@ -36,7 +36,7 @@
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.inject.Default;
-import jakarta.persistence.spi.PersistenceUnitTransactionType;
+import jakarta.persistence.PersistenceUnitTransactionType;
import jakarta.xml.bind.JAXBElement;
import org.hibernate.boot.archive.scan.spi.ClassDescriptor;
@@ -45,9 +45,9 @@
import org.hibernate.cfg.AvailableSettings;
import org.hibernate.integrator.spi.Integrator;
import org.hibernate.jpa.boot.spi.PersistenceUnitDescriptor;
+import org.hibernate.jpa.boot.spi.PersistenceXmlParser;
import org.jboss.jandex.AnnotationInstance;
import org.jboss.jandex.AnnotationTarget.Kind;
-import org.jboss.jandex.AnnotationValue;
import org.jboss.jandex.ClassInfo;
import org.jboss.jandex.CompositeIndex;
import org.jboss.jandex.DotName;
@@ -128,6 +128,7 @@
import io.quarkus.hibernate.orm.runtime.proxies.PreGeneratedProxies;
import io.quarkus.hibernate.orm.runtime.recording.RecordedConfig;
import io.quarkus.hibernate.orm.runtime.schema.SchemaManagementIntegrator;
+import io.quarkus.hibernate.orm.runtime.service.FlatClassLoaderService;
import io.quarkus.hibernate.orm.runtime.tenant.DataSourceTenantConnectionResolver;
import io.quarkus.hibernate.orm.runtime.tenant.TenantConnectionResolver;
import io.quarkus.panache.hibernate.common.deployment.HibernateEnhancersRegisteredBuildItem;
@@ -171,8 +172,6 @@ void registerHibernateOrmMetadataForCoreDialects(
BuildProducer producer) {
producer.produce(DatabaseKindDialectBuildItem.forCoreDialect(DatabaseKind.DB2, "DB2",
Set.of("org.hibernate.dialect.DB2Dialect")));
- producer.produce(DatabaseKindDialectBuildItem.forCoreDialect(DatabaseKind.DERBY, "Apache Derby",
- Set.of("org.hibernate.dialect.DerbyDialect")));
producer.produce(DatabaseKindDialectBuildItem.forCoreDialect(DatabaseKind.H2, "H2",
Set.of("org.hibernate.dialect.H2Dialect"),
// Using our own default version is extra important for H2
@@ -267,8 +266,12 @@ List hotDeploymentWatchedFiles(HibernateOrmCo
public void parsePersistenceXmlDescriptors(HibernateOrmConfig config,
BuildProducer persistenceXmlDescriptorBuildItemBuildProducer) {
if (!shouldIgnorePersistenceXmlResources(config)) {
- var explicitDescriptors = QuarkusPersistenceXmlParser.locatePersistenceUnits();
- for (var desc : explicitDescriptors) {
+ var parser = PersistenceXmlParser.create(Map.of(), null, FlatClassLoaderService.INSTANCE);
+ var urls = parser.getClassLoaderService().locateResources("META-INF/persistence.xml");
+ if (urls.isEmpty()) {
+ return;
+ }
+ for (var desc : parser.parse(urls).values()) {
persistenceXmlDescriptorBuildItemBuildProducer.produce(new PersistenceXmlDescriptorBuildItem(desc));
}
}
@@ -1345,14 +1348,6 @@ private PreGeneratedProxies generatedProxies(Set managedClassAndPackageN
}
//create a map of entity to proxy type
PreGeneratedProxies preGeneratedProxies = new PreGeneratedProxies();
- Map proxyAnnotations = new HashMap<>();
- for (AnnotationInstance i : combinedIndex.getAnnotations(ClassNames.PROXY)) {
- AnnotationValue proxyClass = i.value("proxyClass");
- if (proxyClass == null) {
- continue;
- }
- proxyAnnotations.put(i.target().asClass().name().toString(), proxyClass.asClass().name().toString());
- }
TypePool transformedClassesTypePool = createTransformedClassesTypePool(transformedClassesBuildItem,
managedClassAndPackageNames);
try (ProxyBuildingHelper proxyHelper = new ProxyBuildingHelper(transformedClassesTypePool)) {
@@ -1364,28 +1359,11 @@ private PreGeneratedProxies generatedProxies(Set managedClassAndPackageN
} else {
Set proxyInterfaceNames = new TreeSet<>();
proxyInterfaceNames.add(ClassNames.HIBERNATE_PROXY.toString()); //always added
- String proxy = proxyAnnotations.get(managedClassOrPackageName);
- if (proxy == null) {
- if (!proxyHelper.isProxiable(managedClassOrPackageName)) {
- //if there is no @Proxy we need to make sure the actual class is proxiable
- continue;
- }
- } else {
- proxyInterfaceNames.add(proxy);
+ if (!proxyHelper.isProxiable(managedClassOrPackageName)) {
+ // we need to make sure the actual class is proxiable
+ continue;
}
final String mappedClass = managedClassOrPackageName;
- for (ClassInfo subclass : combinedIndex
- .getAllKnownSubclasses(DotName.createSimple(managedClassOrPackageName))) {
- String subclassName = subclass.name().toString();
- if (!managedClassAndPackageNames.contains(subclassName)) {
- //not an entity
- continue;
- }
- proxy = proxyAnnotations.get(subclassName);
- if (proxy != null) {
- proxyInterfaceNames.add(proxy);
- }
- }
DynamicType.Unloaded> unloaded = proxyHelper.buildUnloadedProxy(mappedClass, proxyInterfaceNames);
result = new CachedProxy(unloaded, proxyInterfaceNames);
proxyCache.cache.put(managedClassOrPackageName, result);
diff --git a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/JpaJandexScavenger.java b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/JpaJandexScavenger.java
index 76268a0582f84..482a087734030 100644
--- a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/JpaJandexScavenger.java
+++ b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/JpaJandexScavenger.java
@@ -19,17 +19,11 @@
import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmJoinedSubclassEntityType;
import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmRootEntityType;
import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmUnionSubclassEntityType;
-import org.hibernate.boot.jaxb.mapping.EntityOrMappedSuperclass;
-import org.hibernate.boot.jaxb.mapping.JaxbConverter;
-import org.hibernate.boot.jaxb.mapping.JaxbEmbeddable;
-import org.hibernate.boot.jaxb.mapping.JaxbEntity;
-import org.hibernate.boot.jaxb.mapping.JaxbEntityListener;
-import org.hibernate.boot.jaxb.mapping.JaxbEntityListeners;
-import org.hibernate.boot.jaxb.mapping.JaxbEntityMappings;
-import org.hibernate.boot.jaxb.mapping.JaxbMappedSuperclass;
-import org.hibernate.boot.jaxb.mapping.JaxbPersistenceUnitDefaults;
-import org.hibernate.boot.jaxb.mapping.JaxbPersistenceUnitMetadata;
-import org.hibernate.boot.jaxb.mapping.ManagedType;
+import org.hibernate.boot.jaxb.mapping.spi.JaxbEntity;
+import org.hibernate.boot.jaxb.mapping.spi.JaxbEntityListenerContainerImpl;
+import org.hibernate.boot.jaxb.mapping.spi.JaxbEntityMappingsImpl;
+import org.hibernate.boot.jaxb.mapping.spi.JaxbEntityOrMappedSuperclass;
+import org.hibernate.boot.jaxb.mapping.spi.JaxbManagedType;
import org.jboss.jandex.AnnotationInstance;
import org.jboss.jandex.AnnotationTarget;
import org.jboss.jandex.ClassInfo;
@@ -190,32 +184,33 @@ private void enlistExplicitMappings(Collector collector,
}
}
- private void enlistOrmXmlMapping(Collector collector, JaxbEntityMappings mapping) {
+ private void enlistOrmXmlMapping(Collector collector, JaxbEntityMappingsImpl mapping) {
String packageName = mapping.getPackage();
String packagePrefix = packageName == null ? "" : packageName + ".";
- JaxbPersistenceUnitMetadata metadata = mapping.getPersistenceUnitMetadata();
- JaxbPersistenceUnitDefaults defaults = metadata == null ? null : metadata.getPersistenceUnitDefaults();
+ var metadata = mapping.getPersistenceUnitMetadata();
+ var defaults = metadata == null ? null : metadata.getPersistenceUnitDefaults();
if (defaults != null) {
- enlistOrmXmlMappingListeners(collector, packagePrefix, defaults.getEntityListeners());
+ enlistOrmXmlMappingListeners(collector, packagePrefix, defaults.getEntityListenerContainer());
}
- for (JaxbEntity entity : mapping.getEntities()) {
+ for (var entity : mapping.getEntities()) {
enlistOrmXmlMappingManagedClass(collector, packagePrefix, entity, "entity");
}
- for (JaxbMappedSuperclass mappedSuperclass : mapping.getMappedSuperclasses()) {
+ for (var mappedSuperclass : mapping.getMappedSuperclasses()) {
enlistOrmXmlMappingManagedClass(collector, packagePrefix, mappedSuperclass, "mapped-superclass");
}
- for (JaxbEmbeddable embeddable : mapping.getEmbeddables()) {
+ for (var embeddable : mapping.getEmbeddables()) {
String name = safeGetClassName(packagePrefix, embeddable, "embeddable");
enlistExplicitClass(collector, name);
}
- for (JaxbConverter converter : mapping.getConverters()) {
+ for (var converter : mapping.getConverters()) {
collector.potentialCdiBeanTypes.add(DotName.createSimple(qualifyIfNecessary(packagePrefix, converter.getClazz())));
}
}
- private void enlistOrmXmlMappingManagedClass(Collector collector, String packagePrefix, EntityOrMappedSuperclass managed,
+ private void enlistOrmXmlMappingManagedClass(Collector collector, String packagePrefix,
+ JaxbEntityOrMappedSuperclass managed,
String nodeName) {
String name = safeGetClassName(packagePrefix, managed, nodeName);
enlistExplicitClass(collector, name);
@@ -225,19 +220,20 @@ private void enlistOrmXmlMappingManagedClass(Collector collector, String package
collector.entityTypes.add(name);
}
- enlistOrmXmlMappingListeners(collector, packagePrefix, managed.getEntityListeners());
+ enlistOrmXmlMappingListeners(collector, packagePrefix, managed.getEntityListenerContainer());
}
- private void enlistOrmXmlMappingListeners(Collector collector, String packagePrefix, JaxbEntityListeners entityListeners) {
+ private void enlistOrmXmlMappingListeners(Collector collector, String packagePrefix,
+ JaxbEntityListenerContainerImpl entityListeners) {
if (entityListeners == null) {
return;
}
- for (JaxbEntityListener listener : entityListeners.getEntityListener()) {
+ for (var listener : entityListeners.getEntityListeners()) {
collector.potentialCdiBeanTypes.add(DotName.createSimple(qualifyIfNecessary(packagePrefix, listener.getClazz())));
}
}
- private static String safeGetClassName(String packagePrefix, ManagedType managedType, String nodeName) {
+ private static String safeGetClassName(String packagePrefix, JaxbManagedType managedType, String nodeName) {
String name = managedType.getClazz();
if (name == null) {
throw new IllegalArgumentException("Missing attribute '" + nodeName + ".class'");
diff --git a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/QuarkusPersistenceXmlParser.java b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/QuarkusPersistenceXmlParser.java
deleted file mode 100644
index 508178dd4aab9..0000000000000
--- a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/QuarkusPersistenceXmlParser.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package io.quarkus.hibernate.orm.deployment;
-
-import java.net.URL;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import jakarta.persistence.spi.PersistenceUnitTransactionType;
-
-import org.hibernate.jpa.boot.internal.PersistenceXmlParser;
-import org.hibernate.jpa.boot.spi.PersistenceUnitDescriptor;
-
-import io.quarkus.hibernate.orm.runtime.service.FlatClassLoaderService;
-
-/**
- * Similar to Hibernate ORM's PersistenceXmlParser to adapt it to
- * specific needs in Quarkus.
- */
-final class QuarkusPersistenceXmlParser extends PersistenceXmlParser {
-
- /**
- * Similar to {@link PersistenceXmlParser#locatePersistenceUnits(Map)}
- * except it doesn't need a properties map, and avoids complaining if no resources are found.
- *
- * @return the list of ParsedPersistenceXmlDescriptor(s), after discovery and parsing.
- */
- public static List extends PersistenceUnitDescriptor> locatePersistenceUnits() {
- final QuarkusPersistenceXmlParser parser = new QuarkusPersistenceXmlParser();
- parser.doResolve();
- return parser.getResolvedPersistenceUnits();
- }
-
- private QuarkusPersistenceXmlParser() {
- //N.B. RESOURCE_LOCAL is matching the default in Hibernate ORM; we use the same here as persistence.xml is treated as "legacy"
- // yet this is not the default that Quarkus will use when booting via `application.properties`.
- super(FlatClassLoaderService.INSTANCE, PersistenceUnitTransactionType.RESOURCE_LOCAL);
- }
-
- private void doResolve() {
- final List xmlUrls = FlatClassLoaderService.INSTANCE.locateResources("META-INF/persistence.xml");
- for (URL xmlUrl : xmlUrls) {
- parsePersistenceXml(xmlUrl, Collections.emptyMap());
- }
- }
-
-}
diff --git a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/util/HibernateProcessorUtil.java b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/util/HibernateProcessorUtil.java
index ea4b481e290d1..b6b7050d2cc86 100644
--- a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/util/HibernateProcessorUtil.java
+++ b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/util/HibernateProcessorUtil.java
@@ -22,7 +22,6 @@
import org.hibernate.id.SequenceMismatchStrategy;
import org.hibernate.jpa.boot.spi.JpaSettings;
import org.hibernate.jpa.boot.spi.PersistenceUnitDescriptor;
-import org.hibernate.loader.BatchFetchStyle;
import org.jboss.logging.Logger;
import io.quarkus.datasource.common.runtime.DatabaseKind;
@@ -174,7 +173,6 @@ public static void configureProperties(QuarkusPersistenceUnitDescriptor desc, Hi
int batchSize = firstPresent(config.fetch().batchSize(), config.batchFetchSize()).orElse(defaultBatchSize(reactive));
if (batchSize > 0) {
desc.getProperties().setProperty(AvailableSettings.DEFAULT_BATCH_FETCH_SIZE, Integer.toString(batchSize));
- desc.getProperties().setProperty(AvailableSettings.BATCH_FETCH_STYLE, BatchFetchStyle.PADDED.toString());
}
// Fetch
diff --git a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/xml/QuarkusMappingFileParser.java b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/xml/QuarkusMappingFileParser.java
index 069bee4cd90a2..3c51d87421789 100644
--- a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/xml/QuarkusMappingFileParser.java
+++ b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/xml/QuarkusMappingFileParser.java
@@ -9,6 +9,7 @@
import org.hibernate.boot.archive.internal.ArchiveHelper;
import org.hibernate.boot.jaxb.spi.Binding;
+import org.hibernate.boot.jaxb.spi.JaxbBindableMappingDescriptor;
import org.hibernate.boot.registry.BootstrapServiceRegistry;
import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder;
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
@@ -62,7 +63,7 @@ public Optional parse(String persistenceUnitName, URL pers
}
try (InputStream stream = url.openStream()) {
- Binding> binding = (Binding>) binderAccess.bind(stream);
+ Binding extends JaxbBindableMappingDescriptor> binding = binderAccess.bind(stream);
return Optional.of(RecordableXmlMapping.create(binding));
} catch (RuntimeException | IOException e) {
throw new IllegalStateException(
diff --git a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/SchemaUtil.java b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/SchemaUtil.java
index e2f936ecdf31c..12d9562409b6f 100644
--- a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/SchemaUtil.java
+++ b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/SchemaUtil.java
@@ -11,7 +11,6 @@
import org.hibernate.metamodel.MappingMetamodel;
import org.hibernate.metamodel.mapping.SelectableConsumer;
import org.hibernate.metamodel.mapping.SelectableMapping;
-import org.hibernate.persister.entity.AbstractEntityPersister;
import org.hibernate.persister.entity.EntityPersister;
public final class SchemaUtil {
@@ -21,9 +20,9 @@ private SchemaUtil() {
public static Set getColumnNames(EntityManagerFactory entityManagerFactory, Class> entityType) {
Set result = new HashSet<>();
- AbstractEntityPersister persister = (AbstractEntityPersister) entityManagerFactory
- .unwrap(SessionFactoryImplementor.class)
- .getMetamodel().entityPersister(entityType);
+ var persister = entityManagerFactory.unwrap(SessionFactoryImplementor.class)
+ .getMappingMetamodel()
+ .getEntityDescriptor(entityType);
if (persister == null) {
return result;
}
diff --git a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/config/databaseormcompatibility/DatabaseOrmCompatibilityVersionTest.java b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/config/databaseormcompatibility/DatabaseOrmCompatibilityVersionTest.java
index 021f341bdd22a..882e3e04175b0 100644
--- a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/config/databaseormcompatibility/DatabaseOrmCompatibilityVersionTest.java
+++ b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/config/databaseormcompatibility/DatabaseOrmCompatibilityVersionTest.java
@@ -74,7 +74,8 @@ public class DatabaseOrmCompatibilityVersionTest {
@Test
public void testPropertiesPropagatedToStaticInit() {
- assertThat(SettingsSpyingIdentifierGenerator.collectedSettings).hasSize(1);
+ // Two sets of settings: 0 is static init, 1 is runtime init.
+ assertThat(SettingsSpyingIdentifierGenerator.collectedSettings).hasSize(2);
Map settings = SettingsSpyingIdentifierGenerator.collectedSettings.get(0);
assertThat(settings).containsAllEntriesOf(Map.of(
AvailableSettings.TIMEZONE_DEFAULT_STORAGE, "NORMALIZE",
diff --git a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/config/unsupportedproperties/UnsupportedPropertiesTest.java b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/config/unsupportedproperties/UnsupportedPropertiesTest.java
index d97036d736a0b..c1b0ceb5c05a0 100644
--- a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/config/unsupportedproperties/UnsupportedPropertiesTest.java
+++ b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/config/unsupportedproperties/UnsupportedPropertiesTest.java
@@ -102,7 +102,8 @@ public class UnsupportedPropertiesTest {
@Test
public void testPropertiesPropagatedToStaticInit() {
- assertThat(SettingsSpyingIdentifierGenerator.collectedSettings).hasSize(1);
+ // Two sets of settings: 0 is static init, 1 is runtime init.
+ assertThat(SettingsSpyingIdentifierGenerator.collectedSettings).hasSize(2);
Map settings = SettingsSpyingIdentifierGenerator.collectedSettings.get(0);
assertThat(settings)
.containsEntry("hibernate.some.unknown.key.static-and-runtime", "some-value-1")
diff --git a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/deployment/ClassNamesTest.java b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/deployment/ClassNamesTest.java
index 66ca64943ca52..4362fdf166d16 100644
--- a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/deployment/ClassNamesTest.java
+++ b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/deployment/ClassNamesTest.java
@@ -74,6 +74,15 @@ public void testNoMissingGeneratorClass() {
.containsExactlyInAnyOrderElementsOf(generatorImplementors);
}
+ @Test
+ public void testNoMissingOptimizerClass() {
+ Set generatorImplementors = findConcreteNamedImplementors(hibernateIndex,
+ "org.hibernate.id.enhanced.Optimizer");
+
+ assertThat(ClassNames.OPTIMIZERS)
+ .containsExactlyInAnyOrderElementsOf(generatorImplementors);
+ }
+
@Test
public void testNoMissingJpaAnnotation() {
Set jpaMappingAnnotations = findRuntimeAnnotations(jpaIndex);
@@ -149,7 +158,7 @@ public void testNoMissingJdbcJavaTypeClass() {
List typeParams = JandexUtil.resolveTypeParameters(basicJavaTypeImplInfo.name(), basicJavaTypeName,
hibernateAndJdkIndex);
Type jdbcJavaType = typeParams.get(0);
- if (jdbcJavaType.kind() == Type.Kind.CLASS) {
+ if (jdbcJavaType.kind() == Type.Kind.CLASS || jdbcJavaType.kind() == Type.Kind.PARAMETERIZED_TYPE) {
jdbcJavaTypeNames.add(jdbcJavaType.name());
}
}
diff --git a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/enhancer/HibernateEntityEnhancerPresentEmbeddableTest.java b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/enhancer/HibernateEntityEnhancerPresentEmbeddableTest.java
index 4f9fd280eb32d..01e12bc343e2b 100644
--- a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/enhancer/HibernateEntityEnhancerPresentEmbeddableTest.java
+++ b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/enhancer/HibernateEntityEnhancerPresentEmbeddableTest.java
@@ -360,7 +360,6 @@ public void setId(EmbeddableIdWithAnnotation id) {
}
}
- @MappedSuperclass
public interface Identifiable {
Object getId();
}
diff --git a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/interceptor/ApplicationScopedInterceptorTest.java b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/interceptor/ApplicationScopedInterceptorTest.java
index 7b4bc97eaaa77..3d672a2627efd 100644
--- a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/interceptor/ApplicationScopedInterceptorTest.java
+++ b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/interceptor/ApplicationScopedInterceptorTest.java
@@ -13,6 +13,7 @@
import jakarta.persistence.Table;
import jakarta.transaction.UserTransaction;
+import org.hibernate.CallbackException;
import org.hibernate.Interceptor;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
@@ -123,7 +124,8 @@ public ApplicationScopedInterceptor() {
}
@Override
- public boolean onLoad(Object entity, Object id, Object[] state, String[] propertyNames, Type[] types) {
+ public boolean onLoad(Object entity, Object id, Object[] state, String[] propertyNames, Type[] types)
+ throws CallbackException {
loadedIds.add(id);
return false;
}
diff --git a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/interceptor/DependentInterceptorTest.java b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/interceptor/DependentInterceptorTest.java
index c1b38cae6fc8b..3b1a3a355c455 100644
--- a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/interceptor/DependentInterceptorTest.java
+++ b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/interceptor/DependentInterceptorTest.java
@@ -14,6 +14,7 @@
import jakarta.persistence.Table;
import jakarta.transaction.UserTransaction;
+import org.hibernate.CallbackException;
import org.hibernate.Interceptor;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
@@ -126,7 +127,8 @@ public DependentInterceptor() {
}
@Override
- public boolean onLoad(Object entity, Object id, Object[] state, String[] propertyNames, Type[] types) {
+ public boolean onLoad(Object entity, Object id, Object[] state, String[] propertyNames, Type[] types)
+ throws CallbackException {
loadedIds.add(id);
return false;
}
diff --git a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/interceptor/TransactionScopedInterceptorTest.java b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/interceptor/TransactionScopedInterceptorTest.java
index c1f1501778442..30037ff2ed292 100644
--- a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/interceptor/TransactionScopedInterceptorTest.java
+++ b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/interceptor/TransactionScopedInterceptorTest.java
@@ -15,6 +15,7 @@
import jakarta.transaction.TransactionScoped;
import jakarta.transaction.UserTransaction;
+import org.hibernate.CallbackException;
import org.hibernate.Interceptor;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
@@ -128,7 +129,8 @@ public TransactionScopedInterceptor() {
}
@Override
- public boolean onLoad(Object entity, Object id, Object[] state, String[] propertyNames, Type[] types) {
+ public boolean onLoad(Object entity, Object id, Object[] state, String[] propertyNames, Type[] types)
+ throws CallbackException {
loadedIds.add(id);
return false;
}
diff --git a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/metadatabuildercontributor/CustomMetadataBuilderContributor.java b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/metadatabuildercontributor/CustomMetadataBuilderContributor.java
index 7537062c57d4c..a2444b83a33bb 100644
--- a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/metadatabuildercontributor/CustomMetadataBuilderContributor.java
+++ b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/metadatabuildercontributor/CustomMetadataBuilderContributor.java
@@ -7,7 +7,7 @@
import org.hibernate.boot.MetadataBuilder;
import org.hibernate.boot.model.FunctionContributions;
import org.hibernate.boot.model.FunctionContributor;
-import org.hibernate.query.ReturnableType;
+import org.hibernate.metamodel.model.domain.ReturnableType;
import org.hibernate.query.sqm.function.AbstractSqmSelfRenderingFunctionDescriptor;
import org.hibernate.query.sqm.produce.function.StandardArgumentsValidators;
import org.hibernate.query.sqm.produce.function.StandardFunctionArgumentTypeResolvers;
diff --git a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/multiplepersistenceunits/MultiplePersistenceUnitsCdiEntityManagerTest.java b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/multiplepersistenceunits/MultiplePersistenceUnitsCdiEntityManagerTest.java
index 1a7294613514d..a4a363beac98a 100644
--- a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/multiplepersistenceunits/MultiplePersistenceUnitsCdiEntityManagerTest.java
+++ b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/multiplepersistenceunits/MultiplePersistenceUnitsCdiEntityManagerTest.java
@@ -165,6 +165,6 @@ public void inventoryEntityManagerNoRequestNoTransaction() {
public void testUserInInventoryEntityManager() {
User user = new User("gsmet");
assertThatThrownBy(() -> inventoryEntityManager.persist(user)).isInstanceOf(IllegalArgumentException.class)
- .hasMessageContaining("Unable to locate persister");
+ .hasMessageContaining("Unknown entity type");
}
}
diff --git a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/multiplepersistenceunits/MultiplePersistenceUnitsCdiSessionTest.java b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/multiplepersistenceunits/MultiplePersistenceUnitsCdiSessionTest.java
index 60f87c1c63aba..5608c0c73fe8b 100644
--- a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/multiplepersistenceunits/MultiplePersistenceUnitsCdiSessionTest.java
+++ b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/multiplepersistenceunits/MultiplePersistenceUnitsCdiSessionTest.java
@@ -151,6 +151,6 @@ public void inventoryEntityManagerNoRequestNoTransaction() {
public void testUserInInventorySession() {
User user = new User("gsmet");
assertThatThrownBy(() -> inventorySession.persist(user)).isInstanceOf(IllegalArgumentException.class)
- .hasMessageContaining("Unable to locate persister");
+ .hasMessageContaining("Unknown entity type");
}
}
diff --git a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/multiplepersistenceunits/MultiplePersistenceUnitsInterceptorTest.java b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/multiplepersistenceunits/MultiplePersistenceUnitsInterceptorTest.java
index 73a064f3aa870..b1fe19e68b155 100644
--- a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/multiplepersistenceunits/MultiplePersistenceUnitsInterceptorTest.java
+++ b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/multiplepersistenceunits/MultiplePersistenceUnitsInterceptorTest.java
@@ -9,6 +9,7 @@
import jakarta.inject.Inject;
import jakarta.transaction.UserTransaction;
+import org.hibernate.CallbackException;
import org.hibernate.Interceptor;
import org.hibernate.Session;
import org.hibernate.type.Type;
@@ -115,7 +116,8 @@ public MyDefaultPUInterceptor() {
}
@Override
- public boolean onLoad(Object entity, Object id, Object[] state, String[] propertyNames, Type[] types) {
+ public boolean onLoad(Object entity, Object id, Object[] state, String[] propertyNames, Type[] types)
+ throws CallbackException {
loadedIds.add(id);
return false;
}
@@ -133,7 +135,8 @@ public MyInventoryPUInterceptor() {
}
@Override
- public boolean onLoad(Object entity, Object id, Object[] state, String[] propertyNames, Type[] types) {
+ public boolean onLoad(Object entity, Object id, Object[] state, String[] propertyNames, Type[] types)
+ throws CallbackException {
loadedIds.add(id);
return false;
}
diff --git a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/multiplepersistenceunits/MultiplePersistenceUnitsPackageAnnotationsTest.java b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/multiplepersistenceunits/MultiplePersistenceUnitsPackageAnnotationsTest.java
index b73c006ce0e46..a1efd45e226c6 100644
--- a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/multiplepersistenceunits/MultiplePersistenceUnitsPackageAnnotationsTest.java
+++ b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/multiplepersistenceunits/MultiplePersistenceUnitsPackageAnnotationsTest.java
@@ -102,6 +102,6 @@ public void testPlane() {
public void testUserInInventoryEntityManager() {
User user = new User("gsmet");
assertThatThrownBy(() -> inventoryEntityManager.persist(user)).isInstanceOf(IllegalArgumentException.class)
- .hasMessageContaining("Unable to locate persister");
+ .hasMessageContaining("Unknown entity type");
}
}
diff --git a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/multiplepersistenceunits/MultiplePersistenceUnitsResourceInjectionEntityManagerTest.java b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/multiplepersistenceunits/MultiplePersistenceUnitsResourceInjectionEntityManagerTest.java
index 52a5fafc14ea1..a621a4505f383 100644
--- a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/multiplepersistenceunits/MultiplePersistenceUnitsResourceInjectionEntityManagerTest.java
+++ b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/multiplepersistenceunits/MultiplePersistenceUnitsResourceInjectionEntityManagerTest.java
@@ -54,7 +54,7 @@ public void testPlane() {
public void testUserInInventoryEntityManager() {
User user = new User("gsmet");
assertThatThrownBy(() -> inventoryEntityManager.persist(user)).isInstanceOf(IllegalArgumentException.class)
- .hasMessageContaining("Unable to locate persister");
+ .hasMessageContaining("Unknown entity type");
}
@Test
diff --git a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/multiplepersistenceunits/MultiplePersistenceUnitsResourceInjectionSessionTest.java b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/multiplepersistenceunits/MultiplePersistenceUnitsResourceInjectionSessionTest.java
index 1d5e0ab49a7dc..f2636f5da977e 100644
--- a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/multiplepersistenceunits/MultiplePersistenceUnitsResourceInjectionSessionTest.java
+++ b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/multiplepersistenceunits/MultiplePersistenceUnitsResourceInjectionSessionTest.java
@@ -54,7 +54,7 @@ public void testPlane() {
public void testUserInInventorySession() {
User user = new User("gsmet");
assertThatThrownBy(() -> inventorySession.persist(user)).isInstanceOf(IllegalArgumentException.class)
- .hasMessageContaining("Unable to locate persister");
+ .hasMessageContaining("Unknown entity type");
}
@Test
diff --git a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/multiplepersistenceunits/MultiplePersistenceUnitsSchemaManagerTest.java b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/multiplepersistenceunits/MultiplePersistenceUnitsSchemaManagerTest.java
index 587ce850d841b..81f11e9782fd6 100644
--- a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/multiplepersistenceunits/MultiplePersistenceUnitsSchemaManagerTest.java
+++ b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/multiplepersistenceunits/MultiplePersistenceUnitsSchemaManagerTest.java
@@ -3,8 +3,8 @@
import static org.junit.jupiter.api.Assertions.assertNotNull;
import jakarta.inject.Inject;
+import jakarta.persistence.SchemaManager;
-import org.hibernate.relational.SchemaManager;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
@@ -35,6 +35,10 @@ public class MultiplePersistenceUnitsSchemaManagerTest {
@PersistenceUnit("inventory")
SchemaManager inventorySchemaManager;
+ @Inject
+ @PersistenceUnit("users")
+ org.hibernate.relational.SchemaManager usersHibernateCriteriaBuilder;
+
@Test
public void testDefaultSchemaManager() {
assertNotNull(defaultSchemaManager);
@@ -49,4 +53,9 @@ public void testUsersSchemaManager() {
public void testInventorySchemaManager() {
assertNotNull(inventorySchemaManager);
}
-}
\ No newline at end of file
+
+ @Test
+ public void testUsersHibernateSchemaManager() {
+ assertNotNull(usersHibernateCriteriaBuilder);
+ }
+}
diff --git a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/singlepersistenceunit/SinglePersistenceUnitPackageAnnotationTest.java b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/singlepersistenceunit/SinglePersistenceUnitPackageAnnotationTest.java
index 06f625ec80d8a..e7c39ebd2e613 100644
--- a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/singlepersistenceunit/SinglePersistenceUnitPackageAnnotationTest.java
+++ b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/singlepersistenceunit/SinglePersistenceUnitPackageAnnotationTest.java
@@ -61,6 +61,6 @@ public void testIncluded() {
public void testExcluded() {
ExcludedEntity entity = new ExcludedEntity("gsmet");
assertThatThrownBy(() -> entityManager.persist(entity)).isInstanceOf(IllegalArgumentException.class)
- .hasMessageContaining("Unable to locate persister");
+ .hasMessageContaining("Unknown entity type");
}
}
diff --git a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/singlepersistenceunit/SinglePersistenceUnitPackageConfigurationTest.java b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/singlepersistenceunit/SinglePersistenceUnitPackageConfigurationTest.java
index fd7eb0ea4277e..bd3501cb24920 100644
--- a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/singlepersistenceunit/SinglePersistenceUnitPackageConfigurationTest.java
+++ b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/singlepersistenceunit/SinglePersistenceUnitPackageConfigurationTest.java
@@ -62,6 +62,6 @@ public void testIncluded() {
public void testExcluded() {
ExcludedEntity entity = new ExcludedEntity("gsmet");
assertThatThrownBy(() -> entityManager.persist(entity)).isInstanceOf(IllegalArgumentException.class)
- .hasMessageContaining("Unable to locate persister");
+ .hasMessageContaining("Unknown entity type");
}
}
diff --git a/extensions/hibernate-orm/runtime/pom.xml b/extensions/hibernate-orm/runtime/pom.xml
index f3eba2f7633d0..93ffa141453d1 100644
--- a/extensions/hibernate-orm/runtime/pom.xml
+++ b/extensions/hibernate-orm/runtime/pom.xml
@@ -71,12 +71,6 @@
byte-buddy
compile
-
-
- org.hibernate.common
- hibernate-commons-annotations
- compile
-
+
diff --git a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/FastBootHibernatePersistenceProvider.java b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/FastBootHibernatePersistenceProvider.java
index 6ac5c7549e57e..0ec16b00187df 100644
--- a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/FastBootHibernatePersistenceProvider.java
+++ b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/FastBootHibernatePersistenceProvider.java
@@ -10,6 +10,7 @@
import javax.sql.DataSource;
import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.PersistenceConfiguration;
import jakarta.persistence.PersistenceException;
import jakarta.persistence.spi.PersistenceProvider;
import jakarta.persistence.spi.PersistenceUnitInfo;
@@ -81,6 +82,14 @@ public EntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitI
return getEntityManagerFactoryBuilder(info, properties).build();
}
+ @Override
+ public EntityManagerFactory createEntityManagerFactory(PersistenceConfiguration configuration) {
+ throw new PersistenceException(
+ "This PersistenceProvider does not support createEntityManagerFactory(PersistenceConfiguration). "
+ + " Quarkus is responsible for creating the entity manager factory, so inject your entity manager"
+ + " factory through CDI instead: `@Inject EntityManagerFactory emf`.");
+ }
+
@SuppressWarnings("rawtypes")
@Override
public void generateSchema(PersistenceUnitInfo info, Map map) {
diff --git a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/StatelessSessionLazyDelegator.java b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/StatelessSessionLazyDelegator.java
index c0144eef0a745..df0b070ed3c7a 100644
--- a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/StatelessSessionLazyDelegator.java
+++ b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/StatelessSessionLazyDelegator.java
@@ -4,10 +4,12 @@
import java.util.function.Supplier;
import jakarta.persistence.EntityGraph;
+import jakarta.persistence.TypedQueryReference;
import jakarta.persistence.criteria.CriteriaDelete;
import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.CriteriaUpdate;
+import org.hibernate.CacheMode;
import org.hibernate.Filter;
import org.hibernate.HibernateException;
import org.hibernate.LockMode;
@@ -25,7 +27,6 @@
import org.hibernate.query.SelectionQuery;
import org.hibernate.query.criteria.HibernateCriteriaBuilder;
import org.hibernate.query.criteria.JpaCriteriaInsert;
-import org.hibernate.query.criteria.JpaCriteriaInsertSelect;
/**
* Plays the exact same role as {@link org.hibernate.engine.spi.SessionLazyDelegator} for {@link org.hibernate.Session}
@@ -53,6 +54,11 @@ public Object insert(String entityName, Object entity) {
return delegate.get().insert(entityName, entity);
}
+ @Override
+ public void insertMultiple(List> entities) {
+ delegate.get().insertMultiple(entities);
+ }
+
@Override
public void update(Object entity) {
delegate.get().update(entity);
@@ -63,6 +69,11 @@ public void update(String entityName, Object entity) {
delegate.get().update(entityName, entity);
}
+ @Override
+ public void updateMultiple(List> entities) {
+ delegate.get().updateMultiple(entities);
+ }
+
@Override
public void delete(Object entity) {
delegate.get().delete(entity);
@@ -73,6 +84,11 @@ public void delete(String entityName, Object entity) {
delegate.get().delete(entityName, entity);
}
+ @Override
+ public void deleteMultiple(List> entities) {
+ delegate.get().deleteMultiple(entities);
+ }
+
@Override
public Object get(String entityName, Object id) {
return delegate.get().get(entityName, id);
@@ -93,6 +109,36 @@ public T get(Class entityClass, Object id, LockMode lockMode) {
return delegate.get().get(entityClass, id, lockMode);
}
+ @Override
+ public T get(EntityGraph graph, Object id) {
+ return delegate.get().get(graph, id);
+ }
+
+ @Override
+ public T get(EntityGraph graph, Object id, LockMode lockMode) {
+ return delegate.get().get(graph, id, lockMode);
+ }
+
+ @Override
+ public List getMultiple(Class entityClass, List> ids) {
+ return delegate.get().getMultiple(entityClass, ids);
+ }
+
+ @Override
+ public List getMultiple(Class entityClass, List> ids, LockMode lockMode) {
+ return delegate.get().getMultiple(entityClass, ids, lockMode);
+ }
+
+ @Override
+ public List getMultiple(EntityGraph entityGraph, List> ids) {
+ return delegate.get().getMultiple(entityGraph, ids);
+ }
+
+ @Override
+ public List getMultiple(EntityGraph entityGraph, GraphSemantic graphSemantic, List> ids) {
+ return delegate.get().getMultiple(entityGraph, graphSemantic, ids);
+ }
+
@Override
public Filter enableFilter(String filterName) {
return delegate.get().enableFilter(filterName);
@@ -108,11 +154,6 @@ public void disableFilter(String filterName) {
delegate.get().disableFilter(filterName);
}
- @Override
- public MutationQuery createMutationQuery(JpaCriteriaInsert insertSelect) {
- return delegate.get().createMutationQuery(insertSelect);
- }
-
@Override
public void refresh(Object entity) {
delegate.get().refresh(entity);
@@ -276,6 +317,11 @@ public Query createQuery(CriteriaDelete deleteQuery) {
return delegate.get().createQuery(deleteQuery);
}
+ @Override
+ public Query createQuery(TypedQueryReference typedQueryReference) {
+ return delegate.get().createQuery(typedQueryReference);
+ }
+
@Override
@Deprecated(since = "6.0")
public NativeQuery createNativeQuery(String sqlString) {
@@ -318,6 +364,11 @@ public SelectionQuery createSelectionQuery(CriteriaQuery criteria) {
return delegate.get().createSelectionQuery(criteria);
}
+ @Override
+ public SelectionQuery createSelectionQuery(String hqlString, EntityGraph resultGraph) {
+ return delegate.get().createSelectionQuery(hqlString, resultGraph);
+ }
+
@Override
public MutationQuery createMutationQuery(String hqlString) {
return delegate.get().createMutationQuery(hqlString);
@@ -334,8 +385,8 @@ public MutationQuery createMutationQuery(CriteriaDelete deleteQuery) {
}
@Override
- public MutationQuery createMutationQuery(JpaCriteriaInsertSelect insertSelect) {
- return delegate.get().createMutationQuery(insertSelect);
+ public MutationQuery createMutationQuery(JpaCriteriaInsert insert) {
+ return delegate.get().createMutationQuery(insert);
}
@Override
@@ -427,6 +478,11 @@ public void upsert(String entityName, Object entity) {
delegate.get().upsert(entityName, entity);
}
+ @Override
+ public void upsertMultiple(List> entities) {
+ delegate.get().upsertMultiple(entities);
+ }
+
@Override
public T get(EntityGraph graph, GraphSemantic graphSemantic, Object id) {
return delegate.get().get(graph, graphSemantic, id);
@@ -436,4 +492,14 @@ public T get(EntityGraph graph, GraphSemantic graphSemantic, Object id) {
public T get(EntityGraph graph, GraphSemantic graphSemantic, Object id, LockMode lockMode) {
return delegate.get().get(graph, graphSemantic, id, lockMode);
}
+
+ @Override
+ public CacheMode getCacheMode() {
+ return delegate.get().getCacheMode();
+ }
+
+ @Override
+ public void setCacheMode(CacheMode cacheMode) {
+ delegate.get().setCacheMode(cacheMode);
+ }
}
diff --git a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/boot/FastBootEntityManagerFactoryBuilder.java b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/boot/FastBootEntityManagerFactoryBuilder.java
index 4c2482185a365..c944f53544c94 100644
--- a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/boot/FastBootEntityManagerFactoryBuilder.java
+++ b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/boot/FastBootEntityManagerFactoryBuilder.java
@@ -136,12 +136,6 @@ protected void populate(String persistenceUnitName, SessionFactoryOptionsBuilder
options.disableJtaTransactionAccess();
}
- final boolean allowRefreshDetachedEntity = runtimeSettings.getBoolean(
- org.hibernate.cfg.AvailableSettings.ALLOW_REFRESH_DETACHED_ENTITY);
- if (!allowRefreshDetachedEntity) {
- options.disableRefreshDetachedEntity();
- }
-
//Check for use of deprecated org.hibernate.jpa.AvailableSettings.SESSION_FACTORY_OBSERVER
final Object legacyObserver = runtimeSettings.get("hibernate.ejb.session_factory_observer");
if (legacyObserver != null) {
diff --git a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/boot/FastBootMetadataBuilder.java b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/boot/FastBootMetadataBuilder.java
index 38fb9920b26fc..93f8990e6c52a 100644
--- a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/boot/FastBootMetadataBuilder.java
+++ b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/boot/FastBootMetadataBuilder.java
@@ -14,7 +14,7 @@
import static org.hibernate.cfg.AvailableSettings.URL;
import static org.hibernate.cfg.AvailableSettings.USER;
import static org.hibernate.cfg.AvailableSettings.XML_MAPPING_ENABLED;
-import static org.hibernate.internal.HEMLogging.messageLogger;
+import static org.hibernate.internal.CoreLogging.messageLogger;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
@@ -30,7 +30,7 @@
import java.util.stream.Collectors;
import jakarta.persistence.PersistenceException;
-import jakarta.persistence.spi.PersistenceUnitTransactionType;
+import jakarta.persistence.PersistenceUnitTransactionType;
import org.hibernate.boot.CacheRegionDefinition;
import org.hibernate.boot.MetadataBuilder;
@@ -50,7 +50,7 @@
import org.hibernate.dialect.Dialect;
import org.hibernate.engine.jdbc.dialect.spi.DialectFactory;
import org.hibernate.integrator.spi.Integrator;
-import org.hibernate.internal.EntityManagerMessageLogger;
+import org.hibernate.internal.CoreMessageLogger;
import org.hibernate.internal.util.StringHelper;
import org.hibernate.jpa.boot.internal.StandardJpaScanEnvironmentImpl;
import org.hibernate.jpa.boot.spi.JpaSettings;
@@ -98,7 +98,7 @@ public class FastBootMetadataBuilder {
@Deprecated
private static final String ALLOW_ENHANCEMENT_AS_PROXY = "hibernate.bytecode.allow_enhancement_as_proxy";
- private static final EntityManagerMessageLogger LOG = messageLogger(FastBootMetadataBuilder.class);
+ private static final CoreMessageLogger LOG = messageLogger(FastBootMetadataBuilder.class);
private final PersistenceUnitDescriptor persistenceUnit;
private final BuildTimeSettings buildTimeSettings;
@@ -272,6 +272,9 @@ private MergedSettings mergeSettings(QuarkusPersistenceUnitDefinition puDefiniti
cfg.put("hibernate.boot.allow_jdbc_metadata_access", "false");
+ // Disallow CDI during metadata building in anticipation for https://github.com/quarkusio/quarkus/issues/40897
+ cfg.put(AvailableSettings.ALLOW_EXTENSIONS_IN_CDI, "false");
+
//This shouldn't be encouraged, but sometimes it's really useful - and it used to be the default
//in Hibernate ORM before the JPA spec would require to change this.
//At this time of transitioning we'll only expose it as a global system property, so to allow usage
@@ -593,7 +596,7 @@ private static void applyTransactionProperties(PersistenceUnitDescriptor persist
PersistenceUnitTransactionType transactionType = PersistenceUnitTransactionTypeHelper
.interpretTransactionType(configurationValues.get(JPA_TRANSACTION_TYPE));
if (transactionType == null) {
- transactionType = persistenceUnit.getTransactionType();
+ transactionType = persistenceUnit.getPersistenceUnitTransactionType();
}
if (transactionType == null) {
// is it more appropriate to have this be based on bootstrap entry point (EE vs SE)?
diff --git a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/boot/QuarkusPersistenceUnitDescriptor.java b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/boot/QuarkusPersistenceUnitDescriptor.java
index 7aae162732663..00bbda4204fc5 100644
--- a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/boot/QuarkusPersistenceUnitDescriptor.java
+++ b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/boot/QuarkusPersistenceUnitDescriptor.java
@@ -6,13 +6,14 @@
import java.util.Objects;
import java.util.Properties;
+import jakarta.persistence.PersistenceUnitTransactionType;
import jakarta.persistence.SharedCacheMode;
import jakarta.persistence.ValidationMode;
-import jakarta.persistence.spi.PersistenceUnitTransactionType;
import org.hibernate.bytecode.enhance.spi.EnhancementContext;
import org.hibernate.bytecode.spi.ClassTransformer;
import org.hibernate.jpa.boot.spi.PersistenceUnitDescriptor;
+import org.hibernate.jpa.internal.util.PersistenceUnitTransactionTypeHelper;
import io.quarkus.runtime.annotations.RecordableConstructor;
@@ -25,7 +26,7 @@ public final class QuarkusPersistenceUnitDescriptor implements PersistenceUnitDe
private final String configurationName;
private final String providerClassName;
private final boolean useQuotedIdentifiers;
- private final PersistenceUnitTransactionType transactionType;
+ private final PersistenceUnitTransactionType persistenceUnitTransactionType;
private final ValidationMode validationMode;
private final SharedCacheMode sharedCacheMode;
private final List managedClassNames;
@@ -33,14 +34,14 @@ public final class QuarkusPersistenceUnitDescriptor implements PersistenceUnitDe
private final boolean reactive;
public QuarkusPersistenceUnitDescriptor(String name, String configurationName,
- PersistenceUnitTransactionType transactionType,
+ PersistenceUnitTransactionType persistenceUnitTransactionType,
List managedClassNames,
Properties properties, boolean reactive) {
this.name = name;
this.configurationName = configurationName;
this.providerClassName = null;
this.useQuotedIdentifiers = false;
- this.transactionType = transactionType;
+ this.persistenceUnitTransactionType = persistenceUnitTransactionType;
this.validationMode = null;
this.sharedCacheMode = null;
this.managedClassNames = managedClassNames;
@@ -57,14 +58,14 @@ public QuarkusPersistenceUnitDescriptor(String name, String configurationName,
@RecordableConstructor
public QuarkusPersistenceUnitDescriptor(String name, String configurationName,
String providerClassName, boolean useQuotedIdentifiers,
- PersistenceUnitTransactionType transactionType,
+ PersistenceUnitTransactionType persistenceUnitTransactionType,
ValidationMode validationMode, SharedCacheMode sharedCacheMode, List managedClassNames,
Properties properties, boolean reactive) {
this.name = name;
this.configurationName = configurationName;
this.providerClassName = providerClassName;
this.useQuotedIdentifiers = useQuotedIdentifiers;
- this.transactionType = transactionType;
+ this.persistenceUnitTransactionType = persistenceUnitTransactionType;
this.validationMode = validationMode;
this.sharedCacheMode = sharedCacheMode;
this.managedClassNames = managedClassNames;
@@ -89,7 +90,7 @@ public static QuarkusPersistenceUnitDescriptor validateAndReadFrom(PersistenceUn
verifyIgnoredFields(toClone);
return new QuarkusPersistenceUnitDescriptor(toClone.getName(), toClone.getName(), toClone.getProviderClassName(),
toClone.isUseQuotedIdentifiers(),
- toClone.getTransactionType(), toClone.getValidationMode(), toClone.getSharedCacheMode(),
+ toClone.getPersistenceUnitTransactionType(), toClone.getValidationMode(), toClone.getSharedCacheMode(),
Collections.unmodifiableList(toClone.getManagedClassNames()), toClone.getProperties(), false);
}
@@ -124,8 +125,15 @@ public boolean isExcludeUnlistedClasses() {
}
@Override
- public PersistenceUnitTransactionType getTransactionType() {
- return transactionType;
+ public PersistenceUnitTransactionType getPersistenceUnitTransactionType() {
+ return persistenceUnitTransactionType;
+ }
+
+ @Override
+ @Deprecated
+ @SuppressWarnings("removal")
+ public jakarta.persistence.spi.PersistenceUnitTransactionType getTransactionType() {
+ return PersistenceUnitTransactionTypeHelper.toDeprecatedForm(getPersistenceUnitTransactionType());
}
@Override
@@ -220,7 +228,7 @@ public String toString() {
", configurationName='" + configurationName + '\'' +
", providerClassName='" + providerClassName + '\'' +
", useQuotedIdentifiers=" + useQuotedIdentifiers +
- ", transactionType=" + transactionType +
+ ", transactionType=" + persistenceUnitTransactionType +
", validationMode=" + validationMode +
", sharedCacheMode=" + sharedCacheMode +
", managedClassNames=" + managedClassNames +
diff --git a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/boot/registry/PreconfiguredServiceRegistryBuilder.java b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/boot/registry/PreconfiguredServiceRegistryBuilder.java
index 9f517c2d2b38f..79e4a155f0a92 100644
--- a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/boot/registry/PreconfiguredServiceRegistryBuilder.java
+++ b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/boot/registry/PreconfiguredServiceRegistryBuilder.java
@@ -8,9 +8,9 @@
import org.hibernate.boot.registry.BootstrapServiceRegistry;
import org.hibernate.boot.registry.StandardServiceInitiator;
+import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
import org.hibernate.boot.registry.internal.BootstrapServiceRegistryImpl;
import org.hibernate.boot.registry.internal.StandardServiceRegistryImpl;
-import org.hibernate.boot.registry.selector.internal.StrategySelectorImpl;
import org.hibernate.engine.config.internal.ConfigurationServiceInitiator;
import org.hibernate.engine.jdbc.batch.internal.BatchBuilderInitiator;
import org.hibernate.engine.jdbc.connections.internal.MultiTenantConnectionProviderInitiator;
@@ -38,6 +38,7 @@
import io.quarkus.hibernate.orm.runtime.customized.QuarkusJtaPlatformInitiator;
import io.quarkus.hibernate.orm.runtime.customized.QuarkusRuntimeProxyFactoryFactory;
import io.quarkus.hibernate.orm.runtime.customized.QuarkusRuntimeProxyFactoryFactoryInitiator;
+import io.quarkus.hibernate.orm.runtime.customized.QuarkusStrategySelectorBuilder;
import io.quarkus.hibernate.orm.runtime.recording.RecordedState;
import io.quarkus.hibernate.orm.runtime.service.CfgXmlAccessServiceInitiatorQuarkus;
import io.quarkus.hibernate.orm.runtime.service.FlatClassLoaderService;
@@ -127,16 +128,18 @@ public StandardServiceRegistryImpl buildNewServiceRegistry() {
}
private BootstrapServiceRegistry buildEmptyBootstrapServiceRegistry() {
+ final ClassLoaderService providedClassLoaderService = FlatClassLoaderService.INSTANCE;
// N.B. support for custom IntegratorProvider injected via Properties (as
// instance) removed
// N.B. support for custom StrategySelector is not implemented yet
- final StrategySelectorImpl strategySelector = new StrategySelectorImpl(FlatClassLoaderService.INSTANCE);
+ // A non-empty selector is needed in order to support ID generators that retrieve a naming strategy -- at runtime!
+ var strategySelector = QuarkusStrategySelectorBuilder.buildRuntimeSelector(providedClassLoaderService);
return new BootstrapServiceRegistryImpl(true,
- FlatClassLoaderService.INSTANCE,
+ providedClassLoaderService,
strategySelector, // new MirroringStrategySelector(),
new MirroringIntegratorService(integrators));
}
diff --git a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/boot/xml/RecordableXmlMapping.java b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/boot/xml/RecordableXmlMapping.java
index be4e57bcbad95..f8c2301e470a6 100644
--- a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/boot/xml/RecordableXmlMapping.java
+++ b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/boot/xml/RecordableXmlMapping.java
@@ -3,8 +3,9 @@
import org.hibernate.boot.jaxb.Origin;
import org.hibernate.boot.jaxb.SourceType;
import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmHibernateMapping;
-import org.hibernate.boot.jaxb.mapping.JaxbEntityMappings;
+import org.hibernate.boot.jaxb.mapping.spi.JaxbEntityMappingsImpl;
import org.hibernate.boot.jaxb.spi.Binding;
+import org.hibernate.boot.jaxb.spi.JaxbBindableMappingDescriptor;
import io.quarkus.runtime.annotations.RecordableConstructor;
@@ -16,17 +17,17 @@
*/
public class RecordableXmlMapping {
// The following two properties are mutually exclusive: exactly one of them is non-null.
- private final JaxbEntityMappings ormXmlRoot;
+ private final JaxbEntityMappingsImpl ormXmlRoot;
private final JaxbHbmHibernateMapping hbmXmlRoot;
private final SourceType originType;
private final String originName;
- public static RecordableXmlMapping create(Binding> binding) {
- Object root = binding.getRoot();
+ public static RecordableXmlMapping create(Binding extends JaxbBindableMappingDescriptor> binding) {
+ JaxbBindableMappingDescriptor root = binding.getRoot();
Origin origin = binding.getOrigin();
- if (root instanceof JaxbEntityMappings) {
- return new RecordableXmlMapping((JaxbEntityMappings) root, null, origin.getType(), origin.getName());
+ if (root instanceof JaxbEntityMappingsImpl) {
+ return new RecordableXmlMapping((JaxbEntityMappingsImpl) root, null, origin.getType(), origin.getName());
} else if (root instanceof JaxbHbmHibernateMapping) {
return new RecordableXmlMapping(null, (JaxbHbmHibernateMapping) root, origin.getType(), origin.getName());
} else {
@@ -35,7 +36,7 @@ public static RecordableXmlMapping create(Binding> binding) {
}
@RecordableConstructor
- public RecordableXmlMapping(JaxbEntityMappings ormXmlRoot, JaxbHbmHibernateMapping hbmXmlRoot, SourceType originType,
+ public RecordableXmlMapping(JaxbEntityMappingsImpl ormXmlRoot, JaxbHbmHibernateMapping hbmXmlRoot, SourceType originType,
String originName) {
this.ormXmlRoot = ormXmlRoot;
this.hbmXmlRoot = hbmXmlRoot;
@@ -50,7 +51,7 @@ public String toString() {
'}';
}
- public JaxbEntityMappings getOrmXmlRoot() {
+ public JaxbEntityMappingsImpl getOrmXmlRoot() {
return ormXmlRoot;
}
diff --git a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/customized/QuarkusProxyFactory.java b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/customized/QuarkusProxyFactory.java
index e6321bdb460fc..2a587db45fde3 100644
--- a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/customized/QuarkusProxyFactory.java
+++ b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/customized/QuarkusProxyFactory.java
@@ -93,7 +93,9 @@ public HibernateProxy getProxy(
((ProxyConfiguration) proxy).$$_hibernate_set_interceptor(interceptor);
return proxy;
} catch (Throwable t) {
- String logMessage = LOG.bytecodeEnhancementFailed(entityName);
+ String logMessage = "Bytecode enhancement failed for class '" + entityName
+ + "' (it might be due to the Java module system preventing Hibernate ORM from defining an enhanced class in the same package"
+ + " - in this case, the class should be opened and exported to Hibernate ORM)";
LOG.error(logMessage, t);
throw new HibernateException(logMessage, t);
}
diff --git a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/customized/QuarkusStrategySelectorBuilder.java b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/customized/QuarkusStrategySelectorBuilder.java
index 35a4cdfd0b356..4e9392719d3ce 100644
--- a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/customized/QuarkusStrategySelectorBuilder.java
+++ b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/customized/QuarkusStrategySelectorBuilder.java
@@ -9,9 +9,10 @@
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
import org.hibernate.boot.registry.selector.StrategyRegistration;
import org.hibernate.boot.registry.selector.StrategyRegistrationProvider;
-import org.hibernate.boot.registry.selector.internal.DefaultDialectSelector;
+import org.hibernate.boot.registry.selector.internal.AggregatedDialectSelector;
import org.hibernate.boot.registry.selector.internal.DefaultJtaPlatformSelector;
import org.hibernate.boot.registry.selector.internal.StrategySelectorImpl;
+import org.hibernate.boot.registry.selector.spi.DialectSelector;
import org.hibernate.boot.registry.selector.spi.StrategySelector;
import org.hibernate.cache.internal.DefaultCacheKeysFactory;
import org.hibernate.cache.internal.SimpleCacheKeysFactory;
@@ -22,10 +23,15 @@
import org.hibernate.id.enhanced.LegacyNamingStrategy;
import org.hibernate.id.enhanced.SingleNamingStrategy;
import org.hibernate.id.enhanced.StandardNamingStrategy;
+import org.hibernate.query.sqm.mutation.internal.cte.CteInsertStrategy;
import org.hibernate.query.sqm.mutation.internal.cte.CteMutationStrategy;
+import org.hibernate.query.sqm.mutation.internal.temptable.GlobalTemporaryTableInsertStrategy;
import org.hibernate.query.sqm.mutation.internal.temptable.GlobalTemporaryTableMutationStrategy;
+import org.hibernate.query.sqm.mutation.internal.temptable.LocalTemporaryTableInsertStrategy;
import org.hibernate.query.sqm.mutation.internal.temptable.LocalTemporaryTableMutationStrategy;
+import org.hibernate.query.sqm.mutation.internal.temptable.PersistentTableInsertStrategy;
import org.hibernate.query.sqm.mutation.internal.temptable.PersistentTableMutationStrategy;
+import org.hibernate.query.sqm.mutation.spi.SqmMultiTableInsertStrategy;
import org.hibernate.query.sqm.mutation.spi.SqmMultiTableMutationStrategy;
import org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorBuilderImpl;
import org.hibernate.resource.transaction.backend.jta.internal.JtaTransactionCoordinatorBuilderImpl;
@@ -59,9 +65,10 @@ public static StrategySelector buildSelector(ClassLoaderService classLoaderServi
// build the baseline...
strategySelector.registerStrategyLazily(
Dialect.class,
- new DefaultDialectSelector());
+ new AggregatedDialectSelector(classLoaderService.loadJavaServices(DialectSelector.class)));
strategySelector.registerStrategyLazily(JtaPlatform.class, new DefaultJtaPlatformSelector());
addTransactionCoordinatorBuilders(strategySelector);
+ addSqmMultiTableInsertStrategies(strategySelector);
addSqmMultiTableMutationStrategies(strategySelector);
addImplicitNamingStrategies(strategySelector);
addColumnOrderingStrategies(strategySelector);
@@ -80,9 +87,23 @@ public static StrategySelector buildSelector(ClassLoaderService classLoaderServi
return strategySelector;
}
- @SuppressWarnings("unchecked")
- private static void applyFromStrategyRegistration(
- StrategySelectorImpl strategySelector,
+ /**
+ * Builds the selector for runtime use.
+ *
+ * @param classLoaderService The class loading service used to (attempt to) resolve any un-registered
+ * strategy implementations.
+ *
+ * @return The selector.
+ */
+ public static StrategySelector buildRuntimeSelector(ClassLoaderService classLoaderService) {
+ final StrategySelectorImpl strategySelector = new StrategySelectorImpl(classLoaderService);
+
+ addImplicitNamingStrategies(strategySelector);
+
+ return strategySelector;
+ }
+
+ private static void applyFromStrategyRegistration(StrategySelectorImpl strategySelector,
StrategyRegistration strategyRegistration) {
for (String name : strategyRegistration.getSelectorNames()) {
strategySelector.registerStrategyImplementor(
@@ -103,6 +124,25 @@ private static void addTransactionCoordinatorBuilders(StrategySelectorImpl strat
JtaTransactionCoordinatorBuilderImpl.class);
}
+ private static void addSqmMultiTableInsertStrategies(StrategySelectorImpl strategySelector) {
+ strategySelector.registerStrategyImplementor(
+ SqmMultiTableInsertStrategy.class,
+ CteInsertStrategy.SHORT_NAME,
+ CteInsertStrategy.class);
+ strategySelector.registerStrategyImplementor(
+ SqmMultiTableInsertStrategy.class,
+ GlobalTemporaryTableInsertStrategy.SHORT_NAME,
+ GlobalTemporaryTableInsertStrategy.class);
+ strategySelector.registerStrategyImplementor(
+ SqmMultiTableInsertStrategy.class,
+ LocalTemporaryTableInsertStrategy.SHORT_NAME,
+ LocalTemporaryTableInsertStrategy.class);
+ strategySelector.registerStrategyImplementor(
+ SqmMultiTableInsertStrategy.class,
+ PersistentTableInsertStrategy.SHORT_NAME,
+ PersistentTableInsertStrategy.class);
+ }
+
private static void addSqmMultiTableMutationStrategies(StrategySelectorImpl strategySelector) {
strategySelector.registerStrategyImplementor(
SqmMultiTableMutationStrategy.class,
@@ -192,5 +232,4 @@ private static void addXmlFormatMappers(StrategySelectorImpl strategySelector) {
JaxbXmlFormatMapper.SHORT_NAME,
JaxbXmlFormatMapper.class);
}
-
}
diff --git a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/dev/HibernateOrmDevIntegrator.java b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/dev/HibernateOrmDevIntegrator.java
index 01b8ef08003b0..e3c00c7fc67ab 100644
--- a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/dev/HibernateOrmDevIntegrator.java
+++ b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/dev/HibernateOrmDevIntegrator.java
@@ -3,19 +3,21 @@
import static org.hibernate.cfg.AvailableSettings.HBM2DDL_IMPORT_FILES;
import org.hibernate.boot.Metadata;
+import org.hibernate.boot.spi.BootstrapContext;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.integrator.spi.Integrator;
import org.hibernate.service.spi.SessionFactoryServiceRegistry;
public class HibernateOrmDevIntegrator implements Integrator {
+
@Override
- public void integrate(Metadata metadata, SessionFactoryImplementor sessionFactoryImplementor,
- SessionFactoryServiceRegistry sessionFactoryServiceRegistry) {
+ public void integrate(Metadata metadata, BootstrapContext bootstrapContext,
+ SessionFactoryImplementor sessionFactoryImplementor) {
HibernateOrmDevController.get().pushPersistenceUnit(
sessionFactoryImplementor,
(String) sessionFactoryImplementor.getProperties()
.get(org.hibernate.cfg.AvailableSettings.PERSISTENCE_UNIT_NAME),
- metadata, sessionFactoryServiceRegistry,
+ metadata, sessionFactoryImplementor.getServiceRegistry(),
(String) sessionFactoryImplementor.getProperties().get(HBM2DDL_IMPORT_FILES));
}
diff --git a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/proxies/ProxyDefinitions.java b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/proxies/ProxyDefinitions.java
index 7c0bdfbe8fd45..4d8ced3ebe293 100644
--- a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/proxies/ProxyDefinitions.java
+++ b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/proxies/ProxyDefinitions.java
@@ -103,9 +103,13 @@ private static Class> generateProxyClass(PersistentClass persistentClass,
final String entityName = persistentClass.getEntityName();
final Class mappedClass = persistentClass.getMappedClass();
if (Modifier.isFinal(mappedClass.getModifiers())) {
- LOGGER.warn("Could not generate an enhanced proxy for entity '" + entityName + "' (class='"
- + mappedClass.getCanonicalName()
- + "') as it's final. Your application might perform better if we're allowed to extend it.");
+ // Some Envers entity classes are final, e.g. org.hibernate.envers.DefaultRevisionEntity
+ // There's nothing users can do about it, so let's not warn in those cases.
+ if (!mappedClass.getName().startsWith("org.hibernate.")) {
+ LOGGER.warn("Could not generate an enhanced proxy for entity '" + entityName + "' (class='"
+ + mappedClass.getCanonicalName()
+ + "') as it's final. Your application might perform better if we're allowed to extend it.");
+ }
return null;
}
final java.util.Set> proxyInterfaces = org.hibernate.proxy.pojo.ProxyFactoryHelper
diff --git a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/recording/PrevalidatedQuarkusMetadata.java b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/recording/PrevalidatedQuarkusMetadata.java
index 35410e3c43126..5e70aac7f3123 100644
--- a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/recording/PrevalidatedQuarkusMetadata.java
+++ b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/recording/PrevalidatedQuarkusMetadata.java
@@ -9,7 +9,6 @@
import java.util.function.Supplier;
import org.hibernate.MappingException;
-import org.hibernate.SessionFactory;
import org.hibernate.boot.SessionFactoryBuilder;
import org.hibernate.boot.internal.MetadataImpl;
import org.hibernate.boot.internal.SessionFactoryOptionsBuilder;
@@ -60,7 +59,6 @@ private PrevalidatedQuarkusMetadata(final MetadataImpl metadata) {
public static PrevalidatedQuarkusMetadata validateAndWrap(final MetadataImpl original) {
original.validate();
- original.getBootstrapContext().getReflectionManager().reset();
return new PrevalidatedQuarkusMetadata(original);
}
@@ -91,7 +89,7 @@ public SessionFactoryBuilder getSessionFactoryBuilder() {
}
@Override
- public SessionFactory buildSessionFactory() {
+ public SessionFactoryImplementor buildSessionFactory() {
//Ensure we don't boot Hibernate using this, but rather use the #buildSessionFactoryOptionsBuilder above.
throw new IllegalStateException("This method is not supposed to be used in Quarkus");
}
@@ -144,7 +142,7 @@ public NamedHqlQueryDefinition getNamedHqlQueryMapping(String name) {
}
@Override
- public void visitNamedHqlQueryDefinitions(Consumer definitionConsumer) {
+ public void visitNamedHqlQueryDefinitions(Consumer> definitionConsumer) {
metadata.visitNamedHqlQueryDefinitions(definitionConsumer);
}
@@ -154,7 +152,7 @@ public NamedNativeQueryDefinition getNamedNativeQueryMapping(String name) {
}
@Override
- public void visitNamedNativeQueryDefinitions(Consumer definitionConsumer) {
+ public void visitNamedNativeQueryDefinitions(Consumer> definitionConsumer) {
metadata.visitNamedNativeQueryDefinitions(definitionConsumer);
}
@@ -268,8 +266,8 @@ public SqmFunctionRegistry getFunctionRegistry() {
}
@Override
- public NamedObjectRepository buildNamedQueryRepository(SessionFactoryImplementor sessionFactory) {
- return metadata.buildNamedQueryRepository(sessionFactory);
+ public NamedObjectRepository buildNamedQueryRepository() {
+ return metadata.buildNamedQueryRepository();
}
@Override
@@ -335,11 +333,11 @@ public BootstrapContext getBootstrapContext() {
return metadata.getBootstrapContext();
}
- public Map getNamedQueryMap() {
+ public Map> getNamedQueryMap() {
return metadata.getNamedQueryMap();
}
- public Map getNamedNativeQueryMap() {
+ public Map> getNamedNativeQueryMap() {
return metadata.getNamedNativeQueryMap();
}
diff --git a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/recording/RecordableBootstrap.java b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/recording/RecordableBootstrap.java
index 63bf1af0762fd..082223d5737a1 100644
--- a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/recording/RecordableBootstrap.java
+++ b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/recording/RecordableBootstrap.java
@@ -140,8 +140,9 @@ public StandardServiceRegistryBuilder applySettings(Map settings
}
@Override
- public void clearSettings() {
+ public StandardServiceRegistryBuilder clearSettings() {
settings.clear();
+ return this;
}
/**
diff --git a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/schema/SchemaManagementIntegrator.java b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/schema/SchemaManagementIntegrator.java
index 0fc363fd702cb..eb9c954d2b6f1 100644
--- a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/schema/SchemaManagementIntegrator.java
+++ b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/schema/SchemaManagementIntegrator.java
@@ -10,21 +10,21 @@
import java.util.concurrent.ConcurrentHashMap;
import org.hibernate.boot.Metadata;
+import org.hibernate.boot.spi.BootstrapContext;
import org.hibernate.engine.config.spi.ConfigurationService;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.integrator.spi.Integrator;
import org.hibernate.service.ServiceRegistry;
+import org.hibernate.service.spi.ServiceRegistryImplementor;
import org.hibernate.service.spi.SessionFactoryServiceRegistry;
import org.hibernate.tool.schema.SourceType;
import org.hibernate.tool.schema.TargetType;
-import org.hibernate.tool.schema.internal.DefaultSchemaFilter;
import org.hibernate.tool.schema.internal.exec.ScriptTargetOutputToWriter;
import org.hibernate.tool.schema.spi.CommandAcceptanceException;
import org.hibernate.tool.schema.spi.ContributableMatcher;
import org.hibernate.tool.schema.spi.ExceptionHandler;
import org.hibernate.tool.schema.spi.ExecutionOptions;
import org.hibernate.tool.schema.spi.SchemaDropper;
-import org.hibernate.tool.schema.spi.SchemaFilter;
import org.hibernate.tool.schema.spi.SchemaManagementException;
import org.hibernate.tool.schema.spi.SchemaManagementTool;
import org.hibernate.tool.schema.spi.SchemaMigrator;
@@ -49,10 +49,10 @@ public class SchemaManagementIntegrator implements Integrator, DatabaseSchemaPro
.synchronizedMap(new IdentityHashMap<>());
@Override
- public void integrate(Metadata metadata, SessionFactoryImplementor sessionFactory,
- SessionFactoryServiceRegistry serviceRegistry) {
+ public void integrate(Metadata metadata, BootstrapContext bootstrapContext,
+ SessionFactoryImplementor sessionFactory) {
String name = defaultName(sessionFactory);
- metadataMap.put(name, new Holder(metadata, sessionFactory, serviceRegistry));
+ metadataMap.put(name, new Holder(metadata, sessionFactory, sessionFactory.getServiceRegistry()));
nameCache.put(sessionFactory, name);
}
@@ -186,9 +186,9 @@ public void resetAllDatabases() {
static class Holder {
final Metadata metadata;
final SessionFactoryImplementor sessionFactory;
- final SessionFactoryServiceRegistry serviceRegistry;
+ final ServiceRegistryImplementor serviceRegistry;
- Holder(Metadata metadata, SessionFactoryImplementor sessionFactory, SessionFactoryServiceRegistry serviceRegistry) {
+ Holder(Metadata metadata, SessionFactoryImplementor sessionFactory, ServiceRegistryImplementor serviceRegistry) {
this.metadata = metadata;
this.sessionFactory = sessionFactory;
this.serviceRegistry = serviceRegistry;
@@ -221,11 +221,6 @@ public void handleException(CommandAcceptanceException exception) {
}
};
}
-
- @Override
- public SchemaFilter getSchemaFilter() {
- return DefaultSchemaFilter.INSTANCE;
- }
}
private static class SimpleSourceDescriptor implements SourceDescriptor {
diff --git a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/service/FlatClassLoaderService.java b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/service/FlatClassLoaderService.java
index c15ac900d249c..a238a385b1d01 100644
--- a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/service/FlatClassLoaderService.java
+++ b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/service/FlatClassLoaderService.java
@@ -93,8 +93,7 @@ public Collection loadJavaServices(Class serviceContract) {
}
@Override
- @SuppressWarnings("rawtypes")
- public T generateProxy(InvocationHandler handler, Class... interfaces) {
+ public T generateProxy(InvocationHandler handler, Class>... interfaces) {
throw new AssertionFailure("Not implemented! generateProxy(InvocationHandler handler, Class... interfaces)");
}
diff --git a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/service/QuarkusIdentifierGeneratorFactoryInitiator.java b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/service/QuarkusIdentifierGeneratorFactoryInitiator.java
deleted file mode 100644
index 3e9ca583f83fb..0000000000000
--- a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/service/QuarkusIdentifierGeneratorFactoryInitiator.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package io.quarkus.hibernate.orm.runtime.service;
-
-import java.util.Map;
-
-import org.hibernate.boot.registry.StandardServiceInitiator;
-import org.hibernate.id.factory.IdentifierGeneratorFactory;
-import org.hibernate.id.factory.internal.StandardIdentifierGeneratorFactory;
-import org.hibernate.service.spi.ServiceRegistryImplementor;
-
-/**
- * Uses a StandardIdentifierGeneratorFactory, but one that doesn't retrieve generators from CDI.
- *
- * @see IdentifierGeneratorFactory
- */
-public final class QuarkusIdentifierGeneratorFactoryInitiator
- implements StandardServiceInitiator {
-
- @Override
- public IdentifierGeneratorFactory initiateService(final Map configurationValues,
- final ServiceRegistryImplementor registry) {
- return new StandardIdentifierGeneratorFactory(registry, true /* ignore bean container */);
- }
-
- @Override
- public Class getServiceInitiated() {
- return IdentifierGeneratorFactory.class;
- }
-
-}
diff --git a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/service/QuarkusRuntimeInitDialectFactory.java b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/service/QuarkusRuntimeInitDialectFactory.java
index 5924d80eac29b..113af3481f94c 100644
--- a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/service/QuarkusRuntimeInitDialectFactory.java
+++ b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/service/QuarkusRuntimeInitDialectFactory.java
@@ -1,6 +1,6 @@
package io.quarkus.hibernate.orm.runtime.service;
-import static org.hibernate.internal.HEMLogging.messageLogger;
+import static org.hibernate.internal.CoreLogging.messageLogger;
import java.sql.SQLException;
import java.util.Locale;
@@ -13,7 +13,7 @@
import org.hibernate.dialect.Dialect;
import org.hibernate.engine.jdbc.dialect.spi.DialectFactory;
import org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfoSource;
-import org.hibernate.internal.EntityManagerMessageLogger;
+import org.hibernate.internal.CoreMessageLogger;
import io.quarkus.datasource.common.runtime.DataSourceUtil;
import io.quarkus.hibernate.orm.runtime.HibernateOrmRuntimeConfig;
@@ -27,7 +27,7 @@
* @see QuarkusStaticInitDialectFactory
*/
public class QuarkusRuntimeInitDialectFactory implements DialectFactory {
- private static final EntityManagerMessageLogger LOG = messageLogger(QuarkusRuntimeInitDialectFactory.class);
+ private static final CoreMessageLogger LOG = messageLogger(QuarkusRuntimeInitDialectFactory.class);
private final String persistenceUnitName;
private final boolean isFromPersistenceXml;
private final Dialect dialect;
diff --git a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/service/StandardHibernateORMInitiatorListProvider.java b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/service/StandardHibernateORMInitiatorListProvider.java
index d84ce1479e999..adf7e54d5c349 100644
--- a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/service/StandardHibernateORMInitiatorListProvider.java
+++ b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/service/StandardHibernateORMInitiatorListProvider.java
@@ -81,9 +81,6 @@ public List> initialInitiatorList() {
serviceInitiators.add(JdbcServicesInitiator.INSTANCE);
serviceInitiators.add(RefCursorSupportInitiator.INSTANCE);
- // Custom one!
- serviceInitiators.add(new QuarkusIdentifierGeneratorFactoryInitiator());
-
serviceInitiators.add(QuarkusJtaPlatformInitiator.INSTANCE);
serviceInitiators.add(SessionFactoryServiceRegistryFactoryInitiator.INSTANCE);
diff --git a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/session/TransactionScopedSession.java b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/session/TransactionScopedSession.java
index 415e93fcf119d..c0d58316cadc7 100644
--- a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/session/TransactionScopedSession.java
+++ b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/session/TransactionScopedSession.java
@@ -1,5 +1,6 @@
package io.quarkus.hibernate.orm.runtime.session;
+import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -7,14 +8,23 @@
import jakarta.enterprise.inject.Instance;
import jakarta.persistence.CacheRetrieveMode;
import jakarta.persistence.CacheStoreMode;
+import jakarta.persistence.ConnectionConsumer;
+import jakarta.persistence.ConnectionFunction;
import jakarta.persistence.EntityGraph;
import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.FindOption;
import jakarta.persistence.FlushModeType;
import jakarta.persistence.LockModeType;
+import jakarta.persistence.LockOption;
+import jakarta.persistence.RefreshOption;
import jakarta.persistence.TransactionRequiredException;
+import jakarta.persistence.TypedQuery;
+import jakarta.persistence.TypedQueryReference;
import jakarta.persistence.criteria.CriteriaDelete;
import jakarta.persistence.criteria.CriteriaQuery;
+import jakarta.persistence.criteria.CriteriaSelect;
import jakarta.persistence.criteria.CriteriaUpdate;
+import jakarta.persistence.metamodel.EntityType;
import jakarta.persistence.metamodel.Metamodel;
import jakarta.transaction.Status;
import jakarta.transaction.TransactionManager;
@@ -49,7 +59,6 @@
import org.hibernate.query.SelectionQuery;
import org.hibernate.query.criteria.HibernateCriteriaBuilder;
import org.hibernate.query.criteria.JpaCriteriaInsert;
-import org.hibernate.query.criteria.JpaCriteriaInsertSelect;
import org.hibernate.stat.SessionStatistics;
import io.quarkus.arc.Arc;
@@ -213,6 +222,38 @@ public T find(Class entityClass, Object primaryKey, LockModeType lockMode
}
}
+ @Override
+ public T find(Class entityClass, Object primaryKey, FindOption... options) {
+ checkBlocking();
+ try (SessionResult emr = acquireSession()) {
+ return emr.session.find(entityClass, primaryKey, options);
+ }
+ }
+
+ @Override
+ public T find(EntityGraph entityGraph, Object primaryKey, FindOption... options) {
+ checkBlocking();
+ try (SessionResult emr = acquireSession()) {
+ return emr.session.find(entityGraph, primaryKey, options);
+ }
+ }
+
+ @Override
+ public List findMultiple(Class entityType, List> ids, FindOption... options) {
+ checkBlocking();
+ try (SessionResult emr = acquireSession()) {
+ return emr.session.findMultiple(entityType, ids, options);
+ }
+ }
+
+ @Override
+ public List findMultiple(EntityGraph entityGraph, List> ids, FindOption... options) {
+ checkBlocking();
+ try (SessionResult emr = acquireSession()) {
+ return emr.session.findMultiple(entityGraph, ids, options);
+ }
+ }
+
@Override
public T getReference(Class entityClass, Object primaryKey) {
checkBlocking();
@@ -328,6 +369,17 @@ public void refresh(Object entity, LockModeType lockMode, Map pr
}
}
+ @Override
+ public void refresh(Object entity, RefreshOption... options) {
+ checkBlocking();
+ try (SessionResult emr = acquireSession()) {
+ if (!emr.allowModification) {
+ throw new TransactionRequiredException(TRANSACTION_IS_NOT_ACTIVE);
+ }
+ emr.session.refresh(entity, options);
+ }
+ }
+
@Override
public void clear() {
try (SessionResult emr = acquireSession()) {
@@ -389,6 +441,14 @@ public Query createQuery(CriteriaQuery criteriaQuery) {
}
}
+ @Override
+ public TypedQuery createQuery(CriteriaSelect selectQuery) {
+ checkBlocking();
+ try (SessionResult emr = acquireSession()) {
+ return emr.session.createQuery(selectQuery);
+ }
+ }
+
@Deprecated
@Override
public Query createQuery(CriteriaUpdate updateQuery) {
@@ -415,6 +475,14 @@ public Query createQuery(String qlString, Class resultClass) {
}
}
+ @Override
+ public Query createQuery(TypedQueryReference typedQueryReference) {
+ checkBlocking();
+ try (SessionResult emr = acquireSession()) {
+ return emr.session.createQuery(typedQueryReference);
+ }
+ }
+
@Deprecated
@Override
public Query createNamedQuery(String name) {
@@ -707,60 +775,6 @@ public void evict(Object object) {
}
}
- @Deprecated
- @Override
- public T load(Class theClass, Object id, LockMode lockMode) {
- checkBlocking();
- try (SessionResult emr = acquireSession()) {
- return emr.session.load(theClass, id, lockMode);
- }
- }
-
- @Deprecated
- @Override
- public T load(Class theClass, Object id, LockOptions lockOptions) {
- checkBlocking();
- try (SessionResult emr = acquireSession()) {
- return emr.session.load(theClass, id, lockOptions);
- }
- }
-
- @Deprecated
- @Override
- public Object load(String entityName, Object id, LockMode lockMode) {
- checkBlocking();
- try (SessionResult emr = acquireSession()) {
- return emr.session.load(entityName, id, lockMode);
- }
- }
-
- @Deprecated
- @Override
- public Object load(String entityName, Object id, LockOptions lockOptions) {
- checkBlocking();
- try (SessionResult emr = acquireSession()) {
- return emr.session.load(entityName, id, lockOptions);
- }
- }
-
- @Deprecated
- @Override
- public T load(Class theClass, Object id) {
- checkBlocking();
- try (SessionResult emr = acquireSession()) {
- return emr.session.load(theClass, id);
- }
- }
-
- @Deprecated
- @Override
- public Object load(String entityName, Object id) {
- checkBlocking();
- try (SessionResult emr = acquireSession()) {
- return emr.session.load(entityName, id);
- }
- }
-
@Override
public void load(Object object, Object id) {
checkBlocking();
@@ -787,60 +801,6 @@ public void replicate(String entityName, Object object, ReplicationMode replicat
}
}
- @Deprecated
- @Override
- public Object save(Object object) {
- checkBlocking();
- try (SessionResult emr = acquireSession()) {
- return emr.session.save(object);
- }
- }
-
- @Deprecated
- @Override
- public Object save(String entityName, Object object) {
- checkBlocking();
- try (SessionResult emr = acquireSession()) {
- return emr.session.save(entityName, object);
- }
- }
-
- @Deprecated
- @Override
- public void saveOrUpdate(Object object) {
- checkBlocking();
- try (SessionResult emr = acquireSession()) {
- emr.session.saveOrUpdate(object);
- }
- }
-
- @Deprecated
- @Override
- public void saveOrUpdate(String entityName, Object object) {
- checkBlocking();
- try (SessionResult emr = acquireSession()) {
- emr.session.saveOrUpdate(entityName, object);
- }
- }
-
- @Deprecated
- @Override
- public void update(Object object) {
- checkBlocking();
- try (SessionResult emr = acquireSession()) {
- emr.session.update(object);
- }
- }
-
- @Deprecated
- @Override
- public void update(String entityName, Object object) {
- checkBlocking();
- try (SessionResult emr = acquireSession()) {
- emr.session.update(entityName, object);
- }
- }
-
@Override
public T merge(String entityName, T object) {
checkBlocking();
@@ -850,28 +810,18 @@ public T merge(String entityName, T object) {
}
@Override
- public void persist(String entityName, Object object) {
+ public T merge(T object, EntityGraph> loadGraph) {
checkBlocking();
try (SessionResult emr = acquireSession()) {
- emr.session.persist(entityName, object);
+ return emr.session.merge(object, loadGraph);
}
}
- @Deprecated
@Override
- public void delete(Object object) {
- checkBlocking();
- try (SessionResult emr = acquireSession()) {
- emr.session.delete(object);
- }
- }
-
- @Deprecated
- @Override
- public void delete(String entityName, Object object) {
+ public void persist(String entityName, Object object) {
checkBlocking();
try (SessionResult emr = acquireSession()) {
- emr.session.delete(entityName, object);
+ emr.session.persist(entityName, object);
}
}
@@ -884,42 +834,24 @@ public void lock(Object object, LockMode lockMode) {
}
@Override
- public void lock(Object object, LockOptions lockOptions) {
- try (SessionResult emr = acquireSession()) {
- emr.session.lock(object, lockOptions);
- }
- }
-
- @Override
- public void lock(String entityName, Object object, LockMode lockMode) {
- checkBlocking();
+ public void lock(Object object, LockMode lockMode, LockOption... lockOptions) {
try (SessionResult emr = acquireSession()) {
- emr.session.lock(entityName, object, lockMode);
+ emr.session.lock(object, lockMode, lockOptions);
}
}
@Override
- public LockRequest buildLockRequest(LockOptions lockOptions) {
- checkBlocking();
- try (SessionResult emr = acquireSession()) {
- return emr.session.buildLockRequest(lockOptions);
- }
- }
-
- @Deprecated
- @Override
- public void refresh(String entityName, Object object) {
- checkBlocking();
+ public void lock(Object object, LockOptions lockOptions) {
try (SessionResult emr = acquireSession()) {
- emr.session.refresh(entityName, object);
+ emr.session.lock(object, lockOptions);
}
}
@Override
- public void refresh(Object object, LockMode lockMode) {
+ public void lock(Object entity, LockModeType lockMode, LockOption... options) {
checkBlocking();
try (SessionResult emr = acquireSession()) {
- emr.session.refresh(object, lockMode);
+ emr.session.lock(entity, lockMode, options);
}
}
@@ -931,15 +863,6 @@ public void refresh(Object object, LockOptions lockOptions) {
}
}
- @Deprecated
- @Override
- public void refresh(String entityName, Object object, LockOptions lockOptions) {
- checkBlocking();
- try (SessionResult emr = acquireSession()) {
- emr.session.refresh(entityName, object, lockOptions);
- }
- }
-
@Override
public LockMode getCurrentLockMode(Object object) {
checkBlocking();
@@ -1141,6 +1064,34 @@ public LobHelper getLobHelper() {
}
}
+ @Override
+ public Collection> getManagedEntities() {
+ try (SessionResult emr = acquireSession()) {
+ return emr.session.getManagedEntities();
+ }
+ }
+
+ @Override
+ public Collection> getManagedEntities(String entityName) {
+ try (SessionResult emr = acquireSession()) {
+ return emr.session.getManagedEntities(entityName);
+ }
+ }
+
+ @Override
+ public Collection getManagedEntities(Class entityType) {
+ try (SessionResult emr = acquireSession()) {
+ return emr.session.getManagedEntities(entityType);
+ }
+ }
+
+ @Override
+ public Collection getManagedEntities(EntityType entityType) {
+ try (SessionResult emr = acquireSession()) {
+ return emr.session.getManagedEntities(entityType);
+ }
+ }
+
@Override
public void addEventListeners(SessionEventListener... listeners) {
try (SessionResult emr = acquireSession()) {
@@ -1249,6 +1200,22 @@ public T doReturningWork(ReturningWork work) throws HibernateException {
}
}
+ @Override
+ public void runWithConnection(ConnectionConsumer action) {
+ checkBlocking();
+ try (SessionResult emr = acquireSession()) {
+ emr.session.runWithConnection(action);
+ }
+ }
+
+ @Override
+ public T callWithConnection(ConnectionFunction function) {
+ checkBlocking();
+ try (SessionResult emr = acquireSession()) {
+ return emr.session.callWithConnection(function);
+ }
+ }
+
@Deprecated
@Override
public NativeQuery getNamedNativeQuery(String name) {
@@ -1299,42 +1266,42 @@ public SelectionQuery createSelectionQuery(CriteriaQuery criteria) {
}
@Override
- public MutationQuery createMutationQuery(String hqlString) {
+ public SelectionQuery createSelectionQuery(String hqlString, EntityGraph resultGraph) {
checkBlocking();
try (SessionResult emr = acquireSession()) {
- return emr.session.createMutationQuery(hqlString);
+ return emr.session.createSelectionQuery(hqlString, resultGraph);
}
}
@Override
- public MutationQuery createMutationQuery(CriteriaUpdate updateQuery) {
+ public MutationQuery createMutationQuery(String hqlString) {
checkBlocking();
try (SessionResult emr = acquireSession()) {
- return emr.session.createMutationQuery(updateQuery);
+ return emr.session.createMutationQuery(hqlString);
}
}
@Override
- public MutationQuery createMutationQuery(CriteriaDelete deleteQuery) {
+ public MutationQuery createMutationQuery(CriteriaUpdate updateQuery) {
checkBlocking();
try (SessionResult emr = acquireSession()) {
- return emr.session.createMutationQuery(deleteQuery);
+ return emr.session.createMutationQuery(updateQuery);
}
}
@Override
- public MutationQuery createMutationQuery(JpaCriteriaInsertSelect insertSelect) {
+ public MutationQuery createMutationQuery(CriteriaDelete deleteQuery) {
checkBlocking();
try (SessionResult emr = acquireSession()) {
- return emr.session.createMutationQuery(insertSelect);
+ return emr.session.createMutationQuery(deleteQuery);
}
}
@Override
- public MutationQuery createMutationQuery(JpaCriteriaInsert insertSelect) {
+ public MutationQuery createMutationQuery(JpaCriteriaInsert insert) {
checkBlocking();
try (SessionResult emr = acquireSession()) {
- return emr.session.createMutationQuery(insertSelect);
+ return emr.session.createMutationQuery(insert);
}
}
diff --git a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/session/TransactionScopedStatelessSession.java b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/session/TransactionScopedStatelessSession.java
index 6830a57e069ae..4837d322adf49 100644
--- a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/session/TransactionScopedStatelessSession.java
+++ b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/session/TransactionScopedStatelessSession.java
@@ -6,6 +6,7 @@
import jakarta.enterprise.inject.Instance;
import jakarta.persistence.EntityGraph;
import jakarta.persistence.TransactionRequiredException;
+import jakarta.persistence.TypedQueryReference;
import jakarta.persistence.criteria.CriteriaDelete;
import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.CriteriaUpdate;
@@ -13,6 +14,7 @@
import jakarta.transaction.TransactionManager;
import jakarta.transaction.TransactionSynchronizationRegistry;
+import org.hibernate.CacheMode;
import org.hibernate.Filter;
import org.hibernate.HibernateException;
import org.hibernate.LockMode;
@@ -30,7 +32,6 @@
import org.hibernate.query.SelectionQuery;
import org.hibernate.query.criteria.HibernateCriteriaBuilder;
import org.hibernate.query.criteria.JpaCriteriaInsert;
-import org.hibernate.query.criteria.JpaCriteriaInsertSelect;
import io.quarkus.arc.Arc;
import io.quarkus.hibernate.orm.runtime.HibernateOrmRuntimeConfig;
@@ -177,6 +178,14 @@ public Query createQuery(String qlString, Class resultClass) {
}
}
+ @Override
+ public Query createQuery(TypedQueryReference typedQueryReference) {
+ checkBlocking();
+ try (SessionResult emr = acquireSession()) {
+ return emr.statelessSession.createQuery(typedQueryReference);
+ }
+ }
+
@Deprecated
@Override
public Query createNamedQuery(String name) {
@@ -289,6 +298,14 @@ public Object insert(String s, Object o) {
}
}
+ @Override
+ public void insertMultiple(List> entities) {
+ checkBlocking();
+ try (SessionResult emr = acquireSession()) {
+ emr.statelessSession.insertMultiple(entities);
+ }
+ }
+
@Override
public boolean isOpen() {
return true;
@@ -325,6 +342,14 @@ public void update(String entityName, Object object) {
}
}
+ @Override
+ public void updateMultiple(List> entities) {
+ checkBlocking();
+ try (SessionResult emr = acquireSession()) {
+ emr.statelessSession.updateMultiple(entities);
+ }
+ }
+
@Deprecated
@Override
public void delete(Object object) {
@@ -343,6 +368,14 @@ public void delete(String entityName, Object object) {
}
}
+ @Override
+ public void deleteMultiple(List> entities) {
+ checkBlocking();
+ try (SessionResult emr = acquireSession()) {
+ emr.statelessSession.deleteMultiple(entities);
+ }
+ }
+
@Deprecated
@Override
public void refresh(String entityName, Object object) {
@@ -416,6 +449,54 @@ public Object get(String entityName, Object id, LockMode lockMode) {
}
}
+ @Override
+ public T get(EntityGraph graph, Object id) {
+ checkBlocking();
+ try (SessionResult emr = acquireSession()) {
+ return emr.statelessSession.get(graph, id);
+ }
+ }
+
+ @Override
+ public T get(EntityGraph graph, Object id, LockMode lockMode) {
+ checkBlocking();
+ try (SessionResult emr = acquireSession()) {
+ return emr.statelessSession.get(graph, id, lockMode);
+ }
+ }
+
+ @Override
+ public List getMultiple(Class entityClass, List> ids) {
+ checkBlocking();
+ try (SessionResult emr = acquireSession()) {
+ return emr.statelessSession.getMultiple(entityClass, ids);
+ }
+ }
+
+ @Override
+ public List getMultiple(Class entityClass, List> ids, LockMode lockMode) {
+ checkBlocking();
+ try (SessionResult emr = acquireSession()) {
+ return emr.statelessSession.getMultiple(entityClass, ids, lockMode);
+ }
+ }
+
+ @Override
+ public List getMultiple(EntityGraph entityGraph, List> ids) {
+ checkBlocking();
+ try (SessionResult emr = acquireSession()) {
+ return emr.statelessSession.getMultiple(entityGraph, ids);
+ }
+ }
+
+ @Override
+ public List getMultiple(EntityGraph entityGraph, GraphSemantic graphSemantic, List> ids) {
+ checkBlocking();
+ try (SessionResult emr = acquireSession()) {
+ return emr.statelessSession.getMultiple(entityGraph, graphSemantic, ids);
+ }
+ }
+
@Override
public Filter enableFilter(String filterName) {
checkBlocking();
@@ -591,42 +672,42 @@ public SelectionQuery createSelectionQuery(CriteriaQuery criteria) {
}
@Override
- public MutationQuery createMutationQuery(String hqlString) {
+ public SelectionQuery createSelectionQuery(String hqlString, EntityGraph resultGraph) {
checkBlocking();
try (SessionResult emr = acquireSession()) {
- return emr.statelessSession.createMutationQuery(hqlString);
+ return emr.statelessSession.createSelectionQuery(hqlString, resultGraph);
}
}
@Override
- public MutationQuery createMutationQuery(CriteriaUpdate updateQuery) {
+ public MutationQuery createMutationQuery(String hqlString) {
checkBlocking();
try (SessionResult emr = acquireSession()) {
- return emr.statelessSession.createMutationQuery(updateQuery);
+ return emr.statelessSession.createMutationQuery(hqlString);
}
}
@Override
- public MutationQuery createMutationQuery(CriteriaDelete deleteQuery) {
+ public MutationQuery createMutationQuery(CriteriaUpdate updateQuery) {
checkBlocking();
try (SessionResult emr = acquireSession()) {
- return emr.statelessSession.createMutationQuery(deleteQuery);
+ return emr.statelessSession.createMutationQuery(updateQuery);
}
}
@Override
- public MutationQuery createMutationQuery(JpaCriteriaInsertSelect insertSelect) {
+ public MutationQuery createMutationQuery(CriteriaDelete deleteQuery) {
checkBlocking();
try (SessionResult emr = acquireSession()) {
- return emr.statelessSession.createMutationQuery(insertSelect);
+ return emr.statelessSession.createMutationQuery(deleteQuery);
}
}
@Override
- public MutationQuery createMutationQuery(JpaCriteriaInsert insertSelect) {
+ public MutationQuery createMutationQuery(JpaCriteriaInsert insert) {
checkBlocking();
try (SessionResult emr = acquireSession()) {
- return emr.statelessSession.createMutationQuery(insertSelect);
+ return emr.statelessSession.createMutationQuery(insert);
}
}
@@ -755,6 +836,14 @@ public void upsert(String entityName, Object entity) {
}
}
+ @Override
+ public void upsertMultiple(List> entities) {
+ checkBlocking();
+ try (SessionResult emr = acquireSession()) {
+ emr.statelessSession.upsertMultiple(entities);
+ }
+ }
+
@Override
public T get(EntityGraph graph, GraphSemantic graphSemantic, Object id) {
checkBlocking();
@@ -770,4 +859,20 @@ public T get(EntityGraph graph, GraphSemantic graphSemantic, Object id, L
return emr.statelessSession.get(graph, graphSemantic, id, lockMode);
}
}
+
+ @Override
+ public CacheMode getCacheMode() {
+ checkBlocking();
+ try (SessionResult emr = acquireSession()) {
+ return emr.statelessSession.getCacheMode();
+ }
+ }
+
+ @Override
+ public void setCacheMode(CacheMode cacheMode) {
+ checkBlocking();
+ try (SessionResult emr = acquireSession()) {
+ emr.statelessSession.setCacheMode(cacheMode);
+ }
+ }
}
diff --git a/extensions/hibernate-reactive/deployment/src/main/java/io/quarkus/hibernate/reactive/deployment/HibernateReactiveProcessor.java b/extensions/hibernate-reactive/deployment/src/main/java/io/quarkus/hibernate/reactive/deployment/HibernateReactiveProcessor.java
index da639a3535f40..dfd6098ee89de 100644
--- a/extensions/hibernate-reactive/deployment/src/main/java/io/quarkus/hibernate/reactive/deployment/HibernateReactiveProcessor.java
+++ b/extensions/hibernate-reactive/deployment/src/main/java/io/quarkus/hibernate/reactive/deployment/HibernateReactiveProcessor.java
@@ -22,7 +22,7 @@
import java.util.logging.Level;
import java.util.stream.Collectors;
-import jakarta.persistence.spi.PersistenceUnitTransactionType;
+import jakarta.persistence.PersistenceUnitTransactionType;
import org.hibernate.reactive.provider.impl.ReactiveIntegrator;
import org.jboss.logging.Logger;
diff --git a/extensions/hibernate-reactive/deployment/src/test/java/io/quarkus/hibernate/reactive/SchemaUtil.java b/extensions/hibernate-reactive/deployment/src/test/java/io/quarkus/hibernate/reactive/SchemaUtil.java
index 7f05d579b83da..8b6cba116947c 100644
--- a/extensions/hibernate-reactive/deployment/src/test/java/io/quarkus/hibernate/reactive/SchemaUtil.java
+++ b/extensions/hibernate-reactive/deployment/src/test/java/io/quarkus/hibernate/reactive/SchemaUtil.java
@@ -8,7 +8,6 @@
import org.hibernate.metamodel.MappingMetamodel;
import org.hibernate.metamodel.mapping.SelectableConsumer;
import org.hibernate.metamodel.mapping.SelectableMapping;
-import org.hibernate.persister.entity.AbstractEntityPersister;
import org.hibernate.persister.entity.EntityPersister;
import org.hibernate.reactive.mutiny.Mutiny;
@@ -22,7 +21,7 @@ public static Set getColumnNames(
MappingMetamodel metamodel) {
Set result = new HashSet<>();
- AbstractEntityPersister persister = (AbstractEntityPersister) metamodel.locateEntityDescriptor(entityType);
+ var persister = metamodel.getEntityDescriptor(entityType);
if (persister == null) {
return result;
}
diff --git a/extensions/hibernate-reactive/deployment/src/test/java/io/quarkus/hibernate/reactive/config/unsupportedproperties/UnsupportedPropertiesTest.java b/extensions/hibernate-reactive/deployment/src/test/java/io/quarkus/hibernate/reactive/config/unsupportedproperties/UnsupportedPropertiesTest.java
index 27e7fec4bbcb3..50471843c5cb1 100644
--- a/extensions/hibernate-reactive/deployment/src/test/java/io/quarkus/hibernate/reactive/config/unsupportedproperties/UnsupportedPropertiesTest.java
+++ b/extensions/hibernate-reactive/deployment/src/test/java/io/quarkus/hibernate/reactive/config/unsupportedproperties/UnsupportedPropertiesTest.java
@@ -92,7 +92,8 @@ record -> FastBootHibernateReactivePersistenceProvider.class.getName().equals(re
@Test
public void testPropertiesPropagatedToStaticInit() {
- assertThat(SettingsSpyingIdentifierGenerator.collectedSettings).hasSize(1);
+ // Two sets of settings: 0 is static init, 1 is runtime init.
+ assertThat(SettingsSpyingIdentifierGenerator.collectedSettings).hasSize(2);
Map settings = SettingsSpyingIdentifierGenerator.collectedSettings.get(0);
assertThat(settings)
.containsEntry("hibernate.some.unknown.key.static-and-runtime", "some-value-1")
diff --git a/extensions/hibernate-reactive/deployment/src/test/java/io/quarkus/hibernate/reactive/singlepersistenceunit/SinglePersistenceUnitPackageAnnotationTest.java b/extensions/hibernate-reactive/deployment/src/test/java/io/quarkus/hibernate/reactive/singlepersistenceunit/SinglePersistenceUnitPackageAnnotationTest.java
index 39c956fa3dd81..2a4449109e1fe 100644
--- a/extensions/hibernate-reactive/deployment/src/test/java/io/quarkus/hibernate/reactive/singlepersistenceunit/SinglePersistenceUnitPackageAnnotationTest.java
+++ b/extensions/hibernate-reactive/deployment/src/test/java/io/quarkus/hibernate/reactive/singlepersistenceunit/SinglePersistenceUnitPackageAnnotationTest.java
@@ -66,7 +66,7 @@ public void testIncluded(UniAsserter asserter) {
public void testExcluded(UniAsserter asserter) {
ExcludedEntity entity = new ExcludedEntity("gsmet");
asserter.assertFailedWith(() -> persist(entity), t -> {
- assertThat(t).hasMessageContaining("Unable to locate persister");
+ assertThat(t).hasMessageContaining("Unknown entity type");
});
}
diff --git a/extensions/hibernate-reactive/deployment/src/test/java/io/quarkus/hibernate/reactive/singlepersistenceunit/SinglePersistenceUnitPackageConfigurationTest.java b/extensions/hibernate-reactive/deployment/src/test/java/io/quarkus/hibernate/reactive/singlepersistenceunit/SinglePersistenceUnitPackageConfigurationTest.java
index a7ed01d0053d5..ab90348ec8c08 100644
--- a/extensions/hibernate-reactive/deployment/src/test/java/io/quarkus/hibernate/reactive/singlepersistenceunit/SinglePersistenceUnitPackageConfigurationTest.java
+++ b/extensions/hibernate-reactive/deployment/src/test/java/io/quarkus/hibernate/reactive/singlepersistenceunit/SinglePersistenceUnitPackageConfigurationTest.java
@@ -60,7 +60,7 @@ public void testIncluded(UniAsserter asserter) {
public void testExcluded(UniAsserter asserter) {
ExcludedEntity entity = new ExcludedEntity("gsmet");
asserter.assertFailedWith(() -> persist(entity), t -> {
- assertThat(t).hasMessageContaining("Unable to locate persister:");
+ assertThat(t).hasMessageContaining("Unknown entity type:");
});
}
diff --git a/extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/FastBootHibernateReactivePersistenceProvider.java b/extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/FastBootHibernateReactivePersistenceProvider.java
index 548d02eaa59c0..c1d6101cb9092 100644
--- a/extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/FastBootHibernateReactivePersistenceProvider.java
+++ b/extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/FastBootHibernateReactivePersistenceProvider.java
@@ -9,6 +9,7 @@
import java.util.Set;
import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.PersistenceConfiguration;
import jakarta.persistence.PersistenceException;
import jakarta.persistence.spi.PersistenceProvider;
import jakarta.persistence.spi.PersistenceUnitInfo;
@@ -400,6 +401,13 @@ public EntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitI
return getJdbcHibernatePersistenceProviderDelegate().createContainerEntityManagerFactory(info, map);
}
+ @Override
+ public EntityManagerFactory createEntityManagerFactory(PersistenceConfiguration configuration) {
+ //Not supported by Hibernate Reactive: this should always delegate to Hibernate ORM, which will do its own
+ //checks and possibly reject if it's not a suitable.
+ return getJdbcHibernatePersistenceProviderDelegate().createEntityManagerFactory(configuration);
+ }
+
@Override
public void generateSchema(PersistenceUnitInfo info, Map map) {
getJdbcHibernatePersistenceProviderDelegate().generateSchema(info, map);
diff --git a/extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/boot/registry/PreconfiguredReactiveServiceRegistryBuilder.java b/extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/boot/registry/PreconfiguredReactiveServiceRegistryBuilder.java
index dd231b1af9c29..d5ceab7dc3636 100644
--- a/extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/boot/registry/PreconfiguredReactiveServiceRegistryBuilder.java
+++ b/extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/boot/registry/PreconfiguredReactiveServiceRegistryBuilder.java
@@ -8,9 +8,9 @@
import org.hibernate.boot.registry.BootstrapServiceRegistry;
import org.hibernate.boot.registry.StandardServiceInitiator;
+import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
import org.hibernate.boot.registry.internal.BootstrapServiceRegistryImpl;
import org.hibernate.boot.registry.internal.StandardServiceRegistryImpl;
-import org.hibernate.boot.registry.selector.internal.StrategySelectorImpl;
import org.hibernate.engine.config.internal.ConfigurationServiceInitiator;
import org.hibernate.engine.jdbc.batch.internal.BatchBuilderInitiator;
import org.hibernate.engine.jdbc.connections.internal.MultiTenantConnectionProviderInitiator;
@@ -22,7 +22,6 @@
import org.hibernate.persister.internal.PersisterFactoryInitiator;
import org.hibernate.property.access.internal.PropertyAccessStrategyResolverInitiator;
import org.hibernate.reactive.engine.jdbc.mutation.internal.ReactiveMutationExecutorServiceInitiator;
-import org.hibernate.reactive.id.factory.spi.ReactiveIdentifierGeneratorFactoryInitiator;
import org.hibernate.reactive.loader.ast.internal.ReactiveBatchLoaderFactoryInitiator;
import org.hibernate.reactive.provider.service.NativeParametersHandling;
import org.hibernate.reactive.provider.service.NoJtaPlatformInitiator;
@@ -43,6 +42,7 @@
import io.quarkus.hibernate.orm.runtime.customized.QuarkusJndiServiceInitiator;
import io.quarkus.hibernate.orm.runtime.customized.QuarkusRuntimeProxyFactoryFactory;
import io.quarkus.hibernate.orm.runtime.customized.QuarkusRuntimeProxyFactoryFactoryInitiator;
+import io.quarkus.hibernate.orm.runtime.customized.QuarkusStrategySelectorBuilder;
import io.quarkus.hibernate.orm.runtime.recording.RecordedState;
import io.quarkus.hibernate.orm.runtime.service.CfgXmlAccessServiceInitiatorQuarkus;
import io.quarkus.hibernate.orm.runtime.service.FlatClassLoaderService;
@@ -120,16 +120,18 @@ public StandardServiceRegistryImpl buildNewServiceRegistry() {
}
private BootstrapServiceRegistry buildEmptyBootstrapServiceRegistry() {
+ final ClassLoaderService providedClassLoaderService = FlatClassLoaderService.INSTANCE;
// N.B. support for custom IntegratorProvider injected via Properties (as
// instance) removed
// N.B. support for custom StrategySelector is not implemented yet
- final StrategySelectorImpl strategySelector = new StrategySelectorImpl(FlatClassLoaderService.INSTANCE);
+ // A non-empty selector is needed in order to support ID generators that retrieve a naming strategy -- at runtime!
+ var strategySelector = QuarkusStrategySelectorBuilder.buildRuntimeSelector(providedClassLoaderService);
return new BootstrapServiceRegistryImpl(true,
- FlatClassLoaderService.INSTANCE,
+ providedClassLoaderService,
strategySelector, // new MirroringStrategySelector(),
new MirroringIntegratorService(integrators));
}
@@ -234,9 +236,6 @@ private static List> buildQuarkusServiceInitiatorLis
serviceInitiators.add(EntityCopyObserverFactoryInitiator.INSTANCE);
- // Custom for Hibernate Reactive:
- serviceInitiators.add(ReactiveIdentifierGeneratorFactoryInitiator.INSTANCE);
-
//Custom for Hibernate Reactive:
serviceInitiators.add(ReactiveValuesMappingProducerProviderInitiator.INSTANCE);
diff --git a/extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/boot/registry/ReactiveHibernateInitiatorListProvider.java b/extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/boot/registry/ReactiveHibernateInitiatorListProvider.java
index be536c8c7b278..a4691fd614457 100644
--- a/extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/boot/registry/ReactiveHibernateInitiatorListProvider.java
+++ b/extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/boot/registry/ReactiveHibernateInitiatorListProvider.java
@@ -16,7 +16,6 @@
import org.hibernate.event.internal.EntityCopyObserverFactoryInitiator;
import org.hibernate.persister.internal.PersisterFactoryInitiator;
import org.hibernate.property.access.internal.PropertyAccessStrategyResolverInitiator;
-import org.hibernate.reactive.id.factory.spi.ReactiveIdentifierGeneratorFactoryInitiator;
import org.hibernate.reactive.loader.ast.internal.ReactiveBatchLoaderFactoryInitiator;
import org.hibernate.reactive.provider.service.NativeParametersHandling;
import org.hibernate.reactive.provider.service.NoJtaPlatformInitiator;
@@ -33,7 +32,6 @@
import io.quarkus.hibernate.orm.runtime.customized.BootstrapOnlyProxyFactoryFactoryInitiator;
import io.quarkus.hibernate.orm.runtime.customized.QuarkusJndiServiceInitiator;
import io.quarkus.hibernate.orm.runtime.service.InitialInitiatorListProvider;
-import io.quarkus.hibernate.orm.runtime.service.QuarkusIdentifierGeneratorFactoryInitiator;
import io.quarkus.hibernate.orm.runtime.service.QuarkusImportSqlCommandExtractorInitiator;
import io.quarkus.hibernate.orm.runtime.service.QuarkusRegionFactoryInitiator;
import io.quarkus.hibernate.orm.runtime.service.QuarkusStaticInitDialectFactoryInitiator;
@@ -96,9 +94,6 @@ public List> initialInitiatorList() {
serviceInitiators.add(JdbcServicesInitiator.INSTANCE);
serviceInitiators.add(RefCursorSupportInitiator.INSTANCE);
- // Custom one!
- serviceInitiators.add(new QuarkusIdentifierGeneratorFactoryInitiator());
-
// Custom for Hibernate Reactive:
serviceInitiators.add(NoJtaPlatformInitiator.INSTANCE);
@@ -113,9 +108,6 @@ public List> initialInitiatorList() {
serviceInitiators.add(EntityCopyObserverFactoryInitiator.INSTANCE);
- // Custom for Hibernate Reactive:
- serviceInitiators.add(ReactiveIdentifierGeneratorFactoryInitiator.INSTANCE);
-
//Custom for Hibernate Reactive:
serviceInitiators.add(ReactiveValuesMappingProducerProviderInitiator.INSTANCE);
diff --git a/extensions/hibernate-search-orm-elasticsearch/deployment/src/main/java/io/quarkus/hibernate/search/orm/elasticsearch/deployment/HibernateSearchElasticsearchLoggingProcessor.java b/extensions/hibernate-search-orm-elasticsearch/deployment/src/main/java/io/quarkus/hibernate/search/orm/elasticsearch/deployment/HibernateSearchElasticsearchLoggingProcessor.java
deleted file mode 100644
index d825c26c2f6a2..0000000000000
--- a/extensions/hibernate-search-orm-elasticsearch/deployment/src/main/java/io/quarkus/hibernate/search/orm/elasticsearch/deployment/HibernateSearchElasticsearchLoggingProcessor.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package io.quarkus.hibernate.search.orm.elasticsearch.deployment;
-
-import io.quarkus.deployment.annotations.BuildProducer;
-import io.quarkus.deployment.annotations.BuildStep;
-import io.quarkus.deployment.builditem.NativeImageFeatureBuildItem;
-import io.quarkus.deployment.logging.LogCleanupFilterBuildItem;
-import io.quarkus.deployment.pkg.steps.NativeOrNativeSourcesBuild;
-import io.quarkus.hibernate.search.orm.elasticsearch.runtime.graal.DisableLoggingFeature;
-
-// Note this is necessary even if Hibernate Search is disabled
-class HibernateSearchElasticsearchLoggingProcessor {
-
- @BuildStep(onlyIf = NativeOrNativeSourcesBuild.class)
- NativeImageFeatureBuildItem nativeImageFeature() {
- return new NativeImageFeatureBuildItem(DisableLoggingFeature.class);
- }
-
- // Note this is necessary even if Hibernate Search is disabled
- @BuildStep
- void setupLogFilters(BuildProducer filters) {
- // if the category changes, please also update DisableLoggingFeature in the runtime module
- filters.produce(new LogCleanupFilterBuildItem(
- "org.hibernate.search.mapper.orm.bootstrap.impl.HibernateSearchPreIntegrationService", "HSEARCH000034"));
- }
-
-}
diff --git a/extensions/hibernate-search-orm-elasticsearch/deployment/src/test/resources/application-devui-active-false-and-named-pu-active-true.properties b/extensions/hibernate-search-orm-elasticsearch/deployment/src/test/resources/application-devui-active-false-and-named-pu-active-true.properties
index 4c71e5b9bedfd..5814879225d17 100644
--- a/extensions/hibernate-search-orm-elasticsearch/deployment/src/test/resources/application-devui-active-false-and-named-pu-active-true.properties
+++ b/extensions/hibernate-search-orm-elasticsearch/deployment/src/test/resources/application-devui-active-false-and-named-pu-active-true.properties
@@ -17,11 +17,11 @@ quarkus.hibernate-orm."namedpu".schema-management.strategy=drop-and-create
# Hibernate Search is inactive for the default PU
quarkus.hibernate-search-orm.active=false
-quarkus.hibernate-search-orm.elasticsearch.version=8.18
+quarkus.hibernate-search-orm.elasticsearch.version=9.0
quarkus.hibernate-search-orm.elasticsearch.hosts=${elasticsearch.hosts:localhost:9200}
quarkus.hibernate-search-orm.schema-management.strategy=drop-and-create-and-drop
# ... but it's (implicitly) active for a named PU
-quarkus.hibernate-search-orm."namedpu".elasticsearch.version=8.18
+quarkus.hibernate-search-orm."namedpu".elasticsearch.version=9.0
quarkus.hibernate-search-orm."namedpu".elasticsearch.hosts=${elasticsearch.hosts:localhost:9200}
quarkus.hibernate-search-orm."namedpu".schema-management.strategy=drop-and-create-and-drop
diff --git a/extensions/hibernate-search-orm-elasticsearch/deployment/src/test/resources/application-devui-active-false.properties b/extensions/hibernate-search-orm-elasticsearch/deployment/src/test/resources/application-devui-active-false.properties
index bb05e4de072a2..49d9c710a1570 100644
--- a/extensions/hibernate-search-orm-elasticsearch/deployment/src/test/resources/application-devui-active-false.properties
+++ b/extensions/hibernate-search-orm-elasticsearch/deployment/src/test/resources/application-devui-active-false.properties
@@ -7,6 +7,6 @@ quarkus.datasource.jdbc.url=jdbc:h2:mem:default;DB_CLOSE_DELAY=-1
quarkus.hibernate-orm.schema-management.strategy=drop-and-create
quarkus.hibernate-search-orm.active=false
-quarkus.hibernate-search-orm.elasticsearch.version=8.18
+quarkus.hibernate-search-orm.elasticsearch.version=9.0
quarkus.hibernate-search-orm.elasticsearch.hosts=${elasticsearch.hosts:localhost:9200}
quarkus.hibernate-search-orm.schema-management.strategy=drop-and-create-and-drop
diff --git a/extensions/hibernate-search-orm-elasticsearch/deployment/src/test/resources/application-devui.properties b/extensions/hibernate-search-orm-elasticsearch/deployment/src/test/resources/application-devui.properties
index d1fcdbe5e2a3f..62cca1642ed43 100644
--- a/extensions/hibernate-search-orm-elasticsearch/deployment/src/test/resources/application-devui.properties
+++ b/extensions/hibernate-search-orm-elasticsearch/deployment/src/test/resources/application-devui.properties
@@ -6,6 +6,6 @@ quarkus.datasource.jdbc.url=jdbc:h2:mem:default;DB_CLOSE_DELAY=-1
quarkus.hibernate-orm.schema-management.strategy=drop-and-create
-quarkus.hibernate-search-orm.elasticsearch.version=8.18
+quarkus.hibernate-search-orm.elasticsearch.version=9.0
quarkus.hibernate-search-orm.elasticsearch.hosts=${elasticsearch.hosts:localhost:9200}
quarkus.hibernate-search-orm.schema-management.strategy=drop-and-create-and-drop
diff --git a/extensions/hibernate-search-orm-elasticsearch/deployment/src/test/resources/application-multiple-persistence-units.properties b/extensions/hibernate-search-orm-elasticsearch/deployment/src/test/resources/application-multiple-persistence-units.properties
index 13ed905a550bc..34f6167010fd2 100644
--- a/extensions/hibernate-search-orm-elasticsearch/deployment/src/test/resources/application-multiple-persistence-units.properties
+++ b/extensions/hibernate-search-orm-elasticsearch/deployment/src/test/resources/application-multiple-persistence-units.properties
@@ -13,7 +13,7 @@ quarkus.datasource.data3.jdbc.url=jdbc:h2:mem:data3;DB_CLOSE_DELAY=-1
quarkus.hibernate-orm.datasource=
quarkus.hibernate-orm.schema-management.strategy=drop-and-create
-quarkus.hibernate-search-orm.elasticsearch.version=8
+quarkus.hibernate-search-orm.elasticsearch.version=9
quarkus.hibernate-search-orm.elasticsearch.hosts=${elasticsearch.hosts:localhost:9200}
quarkus.hibernate-search-orm.elasticsearch.protocol=${elasticsearch.protocol:http}
quarkus.hibernate-search-orm.schema-management.strategy=drop-and-create-and-drop
@@ -22,7 +22,7 @@ quarkus.hibernate-search-orm.indexing.plan.synchronization.strategy=sync
quarkus.hibernate-orm."pu1".schema-management.strategy=drop-and-create
quarkus.hibernate-orm."pu1".datasource=data1
-quarkus.hibernate-search-orm."pu1".elasticsearch.version=8
+quarkus.hibernate-search-orm."pu1".elasticsearch.version=9
quarkus.hibernate-search-orm."pu1".elasticsearch.hosts=${elasticsearch.hosts:localhost:9200}
quarkus.hibernate-search-orm."pu1".elasticsearch.protocol=${elasticsearch.protocol:http}
quarkus.hibernate-search-orm."pu1".schema-management.strategy=drop-and-create-and-drop
@@ -31,7 +31,7 @@ quarkus.hibernate-search-orm."pu1".indexing.plan.synchronization.strategy=sync
quarkus.hibernate-orm."pu2".schema-management.strategy=drop-and-create
quarkus.hibernate-orm."pu2".datasource=data2
-quarkus.hibernate-search-orm."pu2".elasticsearch.version=8
+quarkus.hibernate-search-orm."pu2".elasticsearch.version=9
quarkus.hibernate-search-orm."pu2".elasticsearch.hosts=${elasticsearch.hosts:localhost:9200}
quarkus.hibernate-search-orm."pu2".elasticsearch.protocol=${elasticsearch.protocol:http}
quarkus.hibernate-search-orm."pu2".schema-management.strategy=drop-and-create-and-drop
diff --git a/extensions/hibernate-search-orm-elasticsearch/deployment/src/test/resources/application-start-offline.properties b/extensions/hibernate-search-orm-elasticsearch/deployment/src/test/resources/application-start-offline.properties
index 7878764e2186a..d3d4bbe26a303 100644
--- a/extensions/hibernate-search-orm-elasticsearch/deployment/src/test/resources/application-start-offline.properties
+++ b/extensions/hibernate-search-orm-elasticsearch/deployment/src/test/resources/application-start-offline.properties
@@ -3,7 +3,7 @@ quarkus.datasource.jdbc.url=jdbc:h2:mem:default;DB_CLOSE_DELAY=-1
quarkus.hibernate-orm.schema-management.strategy=drop-and-create
-quarkus.hibernate-search-orm.elasticsearch.version=8.18
+quarkus.hibernate-search-orm.elasticsearch.version=9.0
# Simulate an offline Elasticsearch instance by pointing to a non-existing cluster
quarkus.hibernate-search-orm.elasticsearch.hosts=localhost:14800
quarkus.hibernate-search-orm.schema-management.strategy=none
diff --git a/extensions/hibernate-search-orm-elasticsearch/deployment/src/test/resources/application.properties b/extensions/hibernate-search-orm-elasticsearch/deployment/src/test/resources/application.properties
index 207fdc2cb4f0d..54d0889e9a758 100644
--- a/extensions/hibernate-search-orm-elasticsearch/deployment/src/test/resources/application.properties
+++ b/extensions/hibernate-search-orm-elasticsearch/deployment/src/test/resources/application.properties
@@ -3,7 +3,7 @@ quarkus.datasource.jdbc.url=jdbc:h2:mem:default;DB_CLOSE_DELAY=-1
quarkus.hibernate-orm.schema-management.strategy=drop-and-create
-quarkus.hibernate-search-orm.elasticsearch.version=8
+quarkus.hibernate-search-orm.elasticsearch.version=9
quarkus.hibernate-search-orm.elasticsearch.hosts=${elasticsearch.hosts:localhost:9200}
quarkus.hibernate-search-orm.elasticsearch.protocol=${elasticsearch.protocol:http}
quarkus.hibernate-search-orm.schema-management.strategy=drop-and-create-and-drop
diff --git a/extensions/hibernate-search-orm-elasticsearch/runtime/src/main/java/io/quarkus/hibernate/search/orm/elasticsearch/runtime/graal/DisableLoggingFeature.java b/extensions/hibernate-search-orm-elasticsearch/runtime/src/main/java/io/quarkus/hibernate/search/orm/elasticsearch/runtime/graal/DisableLoggingFeature.java
deleted file mode 100644
index e3666fda2aed3..0000000000000
--- a/extensions/hibernate-search-orm-elasticsearch/runtime/src/main/java/io/quarkus/hibernate/search/orm/elasticsearch/runtime/graal/DisableLoggingFeature.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package io.quarkus.hibernate.search.orm.elasticsearch.runtime.graal;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.graalvm.nativeimage.hosted.Feature;
-
-/**
- * Disables logging during the analysis phase
- */
-public class DisableLoggingFeature implements Feature {
-
- private static final String[] CATEGORIES = {
- "org.hibernate.search.mapper.orm.bootstrap.impl.HibernateSearchPreIntegrationService"
- };
-
- private final Map categoryMap = new HashMap<>(CATEGORIES.length);
-
- @Override
- public void beforeAnalysis(BeforeAnalysisAccess access) {
- for (String category : CATEGORIES) {
- Logger logger = Logger.getLogger(category);
- categoryMap.put(category, logger.getLevel());
- logger.setLevel(Level.WARNING);
- }
- }
-
- @Override
- public void afterAnalysis(AfterAnalysisAccess access) {
- for (String category : CATEGORIES) {
- Level level = categoryMap.remove(category);
- Logger logger = Logger.getLogger(category);
- logger.setLevel(level);
- }
- }
-
- @Override
- public String getDescription() {
- return "Disables INFO logging during the analysis phase";
- }
-}
diff --git a/extensions/hibernate-search-orm-outbox-polling/deployment/src/test/resources/application-multiple-persistence-units.properties b/extensions/hibernate-search-orm-outbox-polling/deployment/src/test/resources/application-multiple-persistence-units.properties
index 9cf80a8e83e6f..2c08d69b8fa4f 100644
--- a/extensions/hibernate-search-orm-outbox-polling/deployment/src/test/resources/application-multiple-persistence-units.properties
+++ b/extensions/hibernate-search-orm-outbox-polling/deployment/src/test/resources/application-multiple-persistence-units.properties
@@ -7,7 +7,7 @@ quarkus.datasource.data1.jdbc.url=jdbc:h2:mem:data1;DB_CLOSE_DELAY=-1
quarkus.hibernate-orm.schema-management.strategy=drop-and-create
quarkus.hibernate-orm.datasource=
-quarkus.hibernate-search-orm.elasticsearch.version=8
+quarkus.hibernate-search-orm.elasticsearch.version=9
quarkus.hibernate-search-orm.elasticsearch.hosts=${elasticsearch.hosts:localhost:9200}
quarkus.hibernate-search-orm.elasticsearch.protocol=${elasticsearch.protocol:http}
quarkus.hibernate-search-orm.schema-management.strategy=drop-and-create-and-drop
@@ -16,7 +16,7 @@ quarkus.hibernate-search-orm.coordination.strategy=outbox-polling
quarkus.hibernate-orm."pu1".schema-management.strategy=drop-and-create
quarkus.hibernate-orm."pu1".datasource=data1
-quarkus.hibernate-search-orm."pu1".elasticsearch.version=8
+quarkus.hibernate-search-orm."pu1".elasticsearch.version=9
quarkus.hibernate-search-orm."pu1".elasticsearch.hosts=${elasticsearch.hosts:localhost:9200}
quarkus.hibernate-search-orm."pu1".elasticsearch.protocol=${elasticsearch.protocol:http}
quarkus.hibernate-search-orm."pu1".schema-management.strategy=drop-and-create-and-drop
diff --git a/extensions/hibernate-search-orm-outbox-polling/deployment/src/test/resources/application.properties b/extensions/hibernate-search-orm-outbox-polling/deployment/src/test/resources/application.properties
index d815d21852514..86300e6a83849 100644
--- a/extensions/hibernate-search-orm-outbox-polling/deployment/src/test/resources/application.properties
+++ b/extensions/hibernate-search-orm-outbox-polling/deployment/src/test/resources/application.properties
@@ -3,7 +3,7 @@ quarkus.datasource.jdbc.url=jdbc:h2:mem:default;DB_CLOSE_DELAY=-1
quarkus.hibernate-orm.schema-management.strategy=drop-and-create
-quarkus.hibernate-search-orm.elasticsearch.version=8
+quarkus.hibernate-search-orm.elasticsearch.version=9
quarkus.hibernate-search-orm.elasticsearch.hosts=${elasticsearch.hosts:localhost:9200}
quarkus.hibernate-search-orm.elasticsearch.protocol=${elasticsearch.protocol:http}
quarkus.hibernate-search-orm.schema-management.strategy=drop-and-create-and-drop
diff --git a/extensions/hibernate-search-standalone-elasticsearch/deployment/src/test/resources/application-devui-active-false.properties b/extensions/hibernate-search-standalone-elasticsearch/deployment/src/test/resources/application-devui-active-false.properties
index 03cd8316cbb19..4c32db43df8e8 100644
--- a/extensions/hibernate-search-standalone-elasticsearch/deployment/src/test/resources/application-devui-active-false.properties
+++ b/extensions/hibernate-search-standalone-elasticsearch/deployment/src/test/resources/application-devui-active-false.properties
@@ -2,6 +2,6 @@
quarkus.devservices.enabled=false
quarkus.hibernate-search-standalone.active=false
-quarkus.hibernate-search-standalone.elasticsearch.version=8.18
+quarkus.hibernate-search-standalone.elasticsearch.version=9.0
quarkus.hibernate-search-standalone.elasticsearch.hosts=${elasticsearch.hosts:localhost:9200}
quarkus.hibernate-search-standalone.schema-management.strategy=drop-and-create-and-drop
diff --git a/extensions/hibernate-search-standalone-elasticsearch/deployment/src/test/resources/application-devui.properties b/extensions/hibernate-search-standalone-elasticsearch/deployment/src/test/resources/application-devui.properties
index fd7f1cc57eb84..c1c8ec0cb7421 100644
--- a/extensions/hibernate-search-standalone-elasticsearch/deployment/src/test/resources/application-devui.properties
+++ b/extensions/hibernate-search-standalone-elasticsearch/deployment/src/test/resources/application-devui.properties
@@ -1,6 +1,6 @@
# We already start Elasticsearch with Maven
quarkus.devservices.enabled=false
-quarkus.hibernate-search-standalone.elasticsearch.version=8.18
+quarkus.hibernate-search-standalone.elasticsearch.version=9.0
quarkus.hibernate-search-standalone.elasticsearch.hosts=${elasticsearch.hosts:localhost:9200}
quarkus.hibernate-search-standalone.schema-management.strategy=drop-and-create-and-drop
diff --git a/extensions/hibernate-search-standalone-elasticsearch/deployment/src/test/resources/application-start-offline.properties b/extensions/hibernate-search-standalone-elasticsearch/deployment/src/test/resources/application-start-offline.properties
index 425e121e938db..018dff89c4b1d 100644
--- a/extensions/hibernate-search-standalone-elasticsearch/deployment/src/test/resources/application-start-offline.properties
+++ b/extensions/hibernate-search-standalone-elasticsearch/deployment/src/test/resources/application-start-offline.properties
@@ -1,4 +1,4 @@
-quarkus.hibernate-search-standalone.elasticsearch.version=8.18
+quarkus.hibernate-search-standalone.elasticsearch.version=9.0
# Simulate an offline Elasticsearch instance by pointing to a non-existing cluster
quarkus.hibernate-search-standalone.elasticsearch.hosts=localhost:14800
quarkus.hibernate-search-standalone.schema-management.strategy=none
diff --git a/extensions/hibernate-search-standalone-elasticsearch/deployment/src/test/resources/application.properties b/extensions/hibernate-search-standalone-elasticsearch/deployment/src/test/resources/application.properties
index 146e1dea6f792..cd222ba38846f 100644
--- a/extensions/hibernate-search-standalone-elasticsearch/deployment/src/test/resources/application.properties
+++ b/extensions/hibernate-search-standalone-elasticsearch/deployment/src/test/resources/application.properties
@@ -1,4 +1,4 @@
-quarkus.hibernate-search-standalone.elasticsearch.version=8
+quarkus.hibernate-search-standalone.elasticsearch.version=9
quarkus.hibernate-search-standalone.elasticsearch.hosts=${elasticsearch.hosts:localhost:9200}
quarkus.hibernate-search-standalone.elasticsearch.protocol=${elasticsearch.protocol:http}
quarkus.hibernate-search-standalone.schema-management.strategy=drop-and-create-and-drop
diff --git a/extensions/panache/hibernate-orm-panache-kotlin/runtime/pom.xml b/extensions/panache/hibernate-orm-panache-kotlin/runtime/pom.xml
index 466e953432d4e..fab0ef27078b0 100644
--- a/extensions/panache/hibernate-orm-panache-kotlin/runtime/pom.xml
+++ b/extensions/panache/hibernate-orm-panache-kotlin/runtime/pom.xml
@@ -109,12 +109,12 @@
org.hibernate.orm
- hibernate-jpamodelgen
+ hibernate-processor
${hibernate-orm.version}
- org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor
+ org.hibernate.processor.HibernateProcessor
diff --git a/extensions/panache/hibernate-orm-panache/runtime/pom.xml b/extensions/panache/hibernate-orm-panache/runtime/pom.xml
index 9fca077cf498f..54b0d96bc2f23 100644
--- a/extensions/panache/hibernate-orm-panache/runtime/pom.xml
+++ b/extensions/panache/hibernate-orm-panache/runtime/pom.xml
@@ -58,11 +58,11 @@
org.hibernate.orm
- hibernate-jpamodelgen
+ hibernate-processor
- org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor
+ org.hibernate.processor.HibernateProcessor
diff --git a/extensions/panache/hibernate-reactive-panache-common/runtime/src/main/java/io/quarkus/hibernate/reactive/panache/common/runtime/CommonPanacheQueryImpl.java b/extensions/panache/hibernate-reactive-panache-common/runtime/src/main/java/io/quarkus/hibernate/reactive/panache/common/runtime/CommonPanacheQueryImpl.java
index 1c1e779a9cd71..cdc2a180fdefa 100644
--- a/extensions/panache/hibernate-reactive-panache-common/runtime/src/main/java/io/quarkus/hibernate/reactive/panache/common/runtime/CommonPanacheQueryImpl.java
+++ b/extensions/panache/hibernate-reactive-panache-common/runtime/src/main/java/io/quarkus/hibernate/reactive/panache/common/runtime/CommonPanacheQueryImpl.java
@@ -376,7 +376,8 @@ private Mutiny.SelectionQuery> createBaseQuery(Mutiny.Session em) {
Mutiny.SelectionQuery> hibernateQuery;
if (PanacheJpaUtil.isNamedQuery(query)) {
String namedQuery = query.substring(1);
- hibernateQuery = em.createNamedQuery(namedQuery, projectionType);
+ hibernateQuery = projectionType == null ? em.createNamedQuery(namedQuery)
+ : em.createNamedQuery(namedQuery, projectionType);
} else {
try {
hibernateQuery = em.createSelectionQuery(orderBy != null ? query + orderBy : query, projectionType);
diff --git a/extensions/panache/hibernate-reactive-panache-kotlin/runtime/pom.xml b/extensions/panache/hibernate-reactive-panache-kotlin/runtime/pom.xml
index e007a8da611b8..9e1e07216c34f 100644
--- a/extensions/panache/hibernate-reactive-panache-kotlin/runtime/pom.xml
+++ b/extensions/panache/hibernate-reactive-panache-kotlin/runtime/pom.xml
@@ -118,12 +118,12 @@
org.hibernate.orm
- hibernate-jpamodelgen
+ hibernate-processor
${hibernate-orm.version}
- org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor
+ org.hibernate.processor.HibernateProcessor
diff --git a/extensions/panache/hibernate-reactive-panache/runtime/pom.xml b/extensions/panache/hibernate-reactive-panache/runtime/pom.xml
index e13e33af64fbc..94f0cd6c6600d 100644
--- a/extensions/panache/hibernate-reactive-panache/runtime/pom.xml
+++ b/extensions/panache/hibernate-reactive-panache/runtime/pom.xml
@@ -62,11 +62,11 @@
org.hibernate.orm
- hibernate-jpamodelgen
+ hibernate-processor
- org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor
+ org.hibernate.processor.HibernateProcessor
diff --git a/extensions/panache/panache-hibernate-common/runtime/src/main/java/io/quarkus/panache/hibernate/common/runtime/CountParserVisitor.java b/extensions/panache/panache-hibernate-common/runtime/src/main/java/io/quarkus/panache/hibernate/common/runtime/CountParserVisitor.java
deleted file mode 100644
index 8e7f94fcc5014..0000000000000
--- a/extensions/panache/panache-hibernate-common/runtime/src/main/java/io/quarkus/panache/hibernate/common/runtime/CountParserVisitor.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package io.quarkus.panache.hibernate.common.runtime;
-
-import org.antlr.v4.runtime.tree.TerminalNode;
-import org.hibernate.grammars.hql.HqlParser.JoinContext;
-import org.hibernate.grammars.hql.HqlParser.QueryContext;
-import org.hibernate.grammars.hql.HqlParser.QueryOrderContext;
-import org.hibernate.grammars.hql.HqlParser.SelectClauseContext;
-import org.hibernate.grammars.hql.HqlParser.SimpleQueryGroupContext;
-import org.hibernate.grammars.hql.HqlParserBaseVisitor;
-
-public class CountParserVisitor extends HqlParserBaseVisitor {
-
- private int inSimpleQueryGroup;
- private StringBuilder sb = new StringBuilder();
-
- @Override
- public String visitSimpleQueryGroup(SimpleQueryGroupContext ctx) {
- inSimpleQueryGroup++;
- try {
- return super.visitSimpleQueryGroup(ctx);
- } finally {
- inSimpleQueryGroup--;
- }
- }
-
- @Override
- public String visitQuery(QueryContext ctx) {
- super.visitQuery(ctx);
- if (inSimpleQueryGroup == 1 && ctx.selectClause() == null) {
- // insert a count because there's no select
- sb.append(" select count( * )");
- }
- return null;
- }
-
- @Override
- public String visitSelectClause(SelectClauseContext ctx) {
- if (inSimpleQueryGroup == 1) {
- if (ctx.SELECT() != null) {
- ctx.SELECT().accept(this);
- }
- if (ctx.DISTINCT() != null) {
- sb.append(" count(");
- ctx.DISTINCT().accept(this);
- if (ctx.selectionList().children.size() != 1) {
- throw new RequiresSubqueryException();
- }
- ctx.selectionList().children.get(0).accept(this);
- sb.append(" )");
- } else {
- sb.append(" count( * )");
- }
- } else {
- super.visitSelectClause(ctx);
- }
- return null;
- }
-
- @Override
- public String visitJoin(JoinContext ctx) {
- if (inSimpleQueryGroup == 1 && ctx.FETCH() != null) {
- // ignore fetch joins for main query
- return null;
- }
- return super.visitJoin(ctx);
- }
-
- @Override
- public String visitQueryOrder(QueryOrderContext ctx) {
- if (inSimpleQueryGroup == 1) {
- // ignore order/limit/offset for main query
- return null;
- }
- return super.visitQueryOrder(ctx);
- }
-
- @Override
- public String visitTerminal(TerminalNode node) {
- append(node.getText());
- return null;
- }
-
- @Override
- protected String defaultResult() {
- return null;
- }
-
- @Override
- protected String aggregateResult(String aggregate, String nextResult) {
- if (nextResult != null) {
- append(nextResult);
- }
- return null;
- }
-
- private void append(String nextResult) {
- // don't add space at start, or around dots
- if (!sb.isEmpty() && sb.charAt(sb.length() - 1) != '.' && !nextResult.equals(".")) {
- sb.append(" ");
- }
- sb.append(nextResult);
- }
-
- public String result() {
- return sb.toString();
- }
-}
\ No newline at end of file
diff --git a/extensions/panache/panache-hibernate-common/runtime/src/main/java/io/quarkus/panache/hibernate/common/runtime/PanacheJpaUtil.java b/extensions/panache/panache-hibernate-common/runtime/src/main/java/io/quarkus/panache/hibernate/common/runtime/PanacheJpaUtil.java
index c89c0953c4d4d..b2e6d533d9126 100644
--- a/extensions/panache/panache-hibernate-common/runtime/src/main/java/io/quarkus/panache/hibernate/common/runtime/PanacheJpaUtil.java
+++ b/extensions/panache/panache-hibernate-common/runtime/src/main/java/io/quarkus/panache/hibernate/common/runtime/PanacheJpaUtil.java
@@ -17,18 +17,6 @@ public class PanacheJpaUtil {
static final Pattern FROM_PATTERN = Pattern.compile("^\\s*FROM\\s+.*",
Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
- // match a FETCH
- static final Pattern FETCH_PATTERN = Pattern.compile(".*\\s+FETCH\\s+.*",
- Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
-
- // match a lone SELECT
- static final Pattern LONE_SELECT_PATTERN = Pattern.compile(".*SELECT\\s+.*",
- Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
-
- // match a leading WITH
- static final Pattern WITH_PATTERN = Pattern.compile("^\\s*WITH\\s+.*",
- Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
-
public static String getEntityName(Class> entityClass) {
// FIXME: not true?
// Escape the entity name just in case some keywords are used
diff --git a/extensions/panache/panache-hibernate-common/runtime/src/main/java/io/quarkus/panache/hibernate/common/runtime/RequiresSubqueryException.java b/extensions/panache/panache-hibernate-common/runtime/src/main/java/io/quarkus/panache/hibernate/common/runtime/RequiresSubqueryException.java
deleted file mode 100644
index 56fe981344cc0..0000000000000
--- a/extensions/panache/panache-hibernate-common/runtime/src/main/java/io/quarkus/panache/hibernate/common/runtime/RequiresSubqueryException.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package io.quarkus.panache.hibernate.common.runtime;
-
-public class RequiresSubqueryException extends RuntimeException {
-
-}
diff --git a/extensions/panache/panache-hibernate-common/runtime/src/main/java/io/quarkus/panache/hibernate/common/runtime/SubQueryAliasParserVisitor.java b/extensions/panache/panache-hibernate-common/runtime/src/main/java/io/quarkus/panache/hibernate/common/runtime/SubQueryAliasParserVisitor.java
deleted file mode 100644
index 7e4351e85568c..0000000000000
--- a/extensions/panache/panache-hibernate-common/runtime/src/main/java/io/quarkus/panache/hibernate/common/runtime/SubQueryAliasParserVisitor.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package io.quarkus.panache.hibernate.common.runtime;
-
-import org.antlr.v4.runtime.tree.TerminalNode;
-import org.hibernate.grammars.hql.HqlParser.JoinContext;
-import org.hibernate.grammars.hql.HqlParser.QueryOrderContext;
-import org.hibernate.grammars.hql.HqlParser.SelectionContext;
-import org.hibernate.grammars.hql.HqlParser.SimpleQueryGroupContext;
-import org.hibernate.grammars.hql.HqlParserBaseVisitor;
-
-public class SubQueryAliasParserVisitor extends HqlParserBaseVisitor {
-
- private int inSimpleQueryGroup;
- private StringBuilder sb = new StringBuilder();
- private int counter;
-
- @Override
- public String visitSimpleQueryGroup(SimpleQueryGroupContext ctx) {
- inSimpleQueryGroup++;
- try {
- return super.visitSimpleQueryGroup(ctx);
- } finally {
- inSimpleQueryGroup--;
- }
- }
-
- @Override
- public String visitSelection(SelectionContext ctx) {
- super.visitSelection(ctx);
- if (inSimpleQueryGroup == 1) {
- if (ctx.variable() == null) {
- sb.append(" as __v" + counter++);
- }
- }
- return null;
- }
-
- @Override
- public String visitJoin(JoinContext ctx) {
- if (inSimpleQueryGroup == 1 && ctx.FETCH() != null) {
- // ignore fetch joins for main query
- return null;
- }
- return super.visitJoin(ctx);
- }
-
- @Override
- public String visitQueryOrder(QueryOrderContext ctx) {
- if (inSimpleQueryGroup == 1) {
- // ignore order/limit/offset for main query
- return null;
- }
- return super.visitQueryOrder(ctx);
- }
-
- @Override
- public String visitTerminal(TerminalNode node) {
- append(node.getText());
- return null;
- }
-
- @Override
- protected String defaultResult() {
- return null;
- }
-
- @Override
- protected String aggregateResult(String aggregate, String nextResult) {
- if (nextResult != null) {
- append(nextResult);
- }
- return null;
- }
-
- private void append(String nextResult) {
- // don't add space at start, or around dots, commas
- if (!sb.isEmpty() && sb.charAt(sb.length() - 1) != '.' && !nextResult.equals(".") && !nextResult.equals(",")) {
- sb.append(" ");
- }
- sb.append(nextResult);
- }
-
- public String result() {
- return sb.toString();
- }
-}
\ No newline at end of file
diff --git a/extensions/pom.xml b/extensions/pom.xml
index 99b37b0e58231..772cb6b63fe78 100644
--- a/extensions/pom.xml
+++ b/extensions/pom.xml
@@ -96,6 +96,7 @@
agroal
jdbc
hibernate-orm
+ hibernate-orm-derby
hibernate-envers
hibernate-reactive
hibernate-validator
diff --git a/extensions/spring-data-jpa/deployment/src/test/resources/import_customers.sql b/extensions/spring-data-jpa/deployment/src/test/resources/import_customers.sql
index 3c41b423f707d..a343c364d1e77 100644
--- a/extensions/spring-data-jpa/deployment/src/test/resources/import_customers.sql
+++ b/extensions/spring-data-jpa/deployment/src/test/resources/import_customers.sql
@@ -1,11 +1,11 @@
-INSERT INTO "Customer$Country" (id, name, isocode)
+INSERT INTO Customer$Country (id, name, isocode)
VALUES
(1, 'United States', 'US'),
(2, 'France', 'FR'),
(3, 'Germany', 'DE'),
(4, 'Spain', 'ES');
-INSERT INTO "Customer$Address" (id, zipcode, country_id)
+INSERT INTO Customer$Address (id, zipcode, country_id)
VALUES
(1, '10001', 1), -- US address
(2, '75001', 2), -- French address
diff --git a/integration-tests/gradle/src/main/resources/compile-only-lombok/build.gradle b/integration-tests/gradle/src/main/resources/compile-only-lombok/build.gradle
index 907d95c748e97..74b841226d7be 100644
--- a/integration-tests/gradle/src/main/resources/compile-only-lombok/build.gradle
+++ b/integration-tests/gradle/src/main/resources/compile-only-lombok/build.gradle
@@ -22,9 +22,9 @@ dependencies {
testCompileOnly "org.projectlombok:lombok:${lombokVersion}"
testAnnotationProcessor "org.projectlombok:lombok:${lombokVersion}"
- compileOnly "org.hibernate.orm:hibernate-jpamodelgen"
+ compileOnly "org.hibernate.orm:hibernate-processor"
compileOnly enforcedPlatform("${quarkusPlatformGroupId}:${quarkusPlatformArtifactId}:${quarkusPlatformVersion}")
- annotationProcessor "org.hibernate.orm:hibernate-jpamodelgen"
+ annotationProcessor "org.hibernate.orm:hibernate-processor"
annotationProcessor enforcedPlatform("${quarkusPlatformGroupId}:${quarkusPlatformArtifactId}:${quarkusPlatformVersion}")
testImplementation 'io.quarkus:quarkus-junit5'
@@ -45,4 +45,4 @@ compileTestJava {
test {
systemProperty "java.util.logging.manager", "org.jboss.logmanager.LogManager"
-}
\ No newline at end of file
+}
diff --git a/integration-tests/hibernate-orm-data/pom.xml b/integration-tests/hibernate-orm-data/pom.xml
index 66d2437bc6c98..c5e78c63740cc 100644
--- a/integration-tests/hibernate-orm-data/pom.xml
+++ b/integration-tests/hibernate-orm-data/pom.xml
@@ -136,9 +136,12 @@
org.hibernate.orm
- hibernate-jpamodelgen
+ hibernate-processor
+
+ org.hibernate.processor.HibernateProcessor
+
diff --git a/integration-tests/hibernate-orm-jpamodelgen/pom.xml b/integration-tests/hibernate-orm-jpamodelgen/pom.xml
index ea49353433e4b..6385cca16c66a 100644
--- a/integration-tests/hibernate-orm-jpamodelgen/pom.xml
+++ b/integration-tests/hibernate-orm-jpamodelgen/pom.xml
@@ -149,9 +149,12 @@
org.hibernate.orm
- hibernate-jpamodelgen
+ hibernate-processor
+
+ org.hibernate.processor.HibernateProcessor
+
diff --git a/integration-tests/hibernate-orm-panache/src/main/java/io/quarkus/it/panache/defaultpu/TestEndpoint.java b/integration-tests/hibernate-orm-panache/src/main/java/io/quarkus/it/panache/defaultpu/TestEndpoint.java
index 440aa962ac3f0..ed00b7994a1ca 100644
--- a/integration-tests/hibernate-orm-panache/src/main/java/io/quarkus/it/panache/defaultpu/TestEndpoint.java
+++ b/integration-tests/hibernate-orm-panache/src/main/java/io/quarkus/it/panache/defaultpu/TestEndpoint.java
@@ -1819,7 +1819,10 @@ public String testEnhancement27184DeleteDetached() {
@Transactional
public String testBug26308() {
testBug26308Query("from Person2 p left join fetch p.address");
- testBug26308Query("from Person2 p left join p.address");
+ // This cannot work, see https://docs.jboss.org/hibernate/orm/7.0/migration-guide/migration-guide.html#create-query
+ //testBug26308Query("from Person2 p left join p.address");
+ // This must be used instead:
+ testBug26308Query("from Person2 this left join this.address");
testBug26308Query("select p from Person2 p left join fetch p.address");
testBug26308Query("select p from Person2 p left join p.address");
testBug26308Query("from Person2 p left join fetch p.address select p");
diff --git a/integration-tests/hibernate-orm-panache/src/test/java/io/quarkus/it/panache/defaultpu/PanacheMockingTest.java b/integration-tests/hibernate-orm-panache/src/test/java/io/quarkus/it/panache/defaultpu/PanacheMockingTest.java
index 46ef68e1ba5a9..5151162d2cba9 100644
--- a/integration-tests/hibernate-orm-panache/src/test/java/io/quarkus/it/panache/defaultpu/PanacheMockingTest.java
+++ b/integration-tests/hibernate-orm-panache/src/test/java/io/quarkus/it/panache/defaultpu/PanacheMockingTest.java
@@ -30,7 +30,7 @@ public class PanacheMockingTest {
public void setup() {
SelectionQuery mockQuery = Mockito.mock(SelectionQuery.class);
Mockito.doNothing().when(session).persist(Mockito.any());
- Mockito.when(session.createSelectionQuery(Mockito.anyString(), Mockito.any())).thenReturn(mockQuery);
+ Mockito.when(session.createSelectionQuery(Mockito.anyString(), Mockito.> any())).thenReturn(mockQuery);
Mockito.when(mockQuery.getSingleResult()).thenReturn(0l);
}
diff --git a/integration-tests/hibernate-reactive-panache/src/main/java/io/quarkus/it/panache/reactive/TestEndpoint.java b/integration-tests/hibernate-reactive-panache/src/main/java/io/quarkus/it/panache/reactive/TestEndpoint.java
index 42fc452618fda..2a8b20d5ca44a 100644
--- a/integration-tests/hibernate-reactive-panache/src/main/java/io/quarkus/it/panache/reactive/TestEndpoint.java
+++ b/integration-tests/hibernate-reactive-panache/src/main/java/io/quarkus/it/panache/reactive/TestEndpoint.java
@@ -2076,7 +2076,10 @@ public Uni testSortByNullPrecedence() {
@WithTransaction
public Uni testBug26308() {
return testBug26308Query("from Person2 p left join fetch p.address")
- .flatMap(p -> testBug26308Query("from Person2 p left join p.address"))
+ // This cannot work, see https://docs.jboss.org/hibernate/orm/7.0/migration-guide/migration-guide.html#create-query
+ //.flatMap(p -> testBug26308Query("from Person2 p left join p.address"))
+ // This must be used instead:
+ .flatMap(p -> testBug26308Query("from Person2 this left join this.address"))
.flatMap(p -> testBug26308Query("select p from Person2 p left join fetch p.address"))
.flatMap(p -> testBug26308Query("select p from Person2 p left join p.address"))
.flatMap(p -> testBug26308Query("from Person2 p left join fetch p.address select p"))
diff --git a/integration-tests/hibernate-search-orm-elasticsearch-outbox-polling/src/main/java/io/quarkus/it/hibernate/search/orm/elasticsearch/coordination/outboxpolling/OutboxPollingTestUtils.java b/integration-tests/hibernate-search-orm-elasticsearch-outbox-polling/src/main/java/io/quarkus/it/hibernate/search/orm/elasticsearch/coordination/outboxpolling/OutboxPollingTestUtils.java
index 9791044473929..58ebe6c4672e8 100644
--- a/integration-tests/hibernate-search-orm-elasticsearch-outbox-polling/src/main/java/io/quarkus/it/hibernate/search/orm/elasticsearch/coordination/outboxpolling/OutboxPollingTestUtils.java
+++ b/integration-tests/hibernate-search-orm-elasticsearch-outbox-polling/src/main/java/io/quarkus/it/hibernate/search/orm/elasticsearch/coordination/outboxpolling/OutboxPollingTestUtils.java
@@ -16,9 +16,9 @@
import org.hibernate.search.mapper.orm.outboxpolling.cluster.impl.Agent;
import org.hibernate.search.mapper.orm.outboxpolling.cluster.impl.AgentState;
-import org.hibernate.search.mapper.orm.outboxpolling.cluster.impl.OutboxPollingAgentAdditionalJaxbMappingProducer;
+import org.hibernate.search.mapper.orm.outboxpolling.cluster.impl.OutboxPollingAgentAdditionalMappingProducer;
import org.hibernate.search.mapper.orm.outboxpolling.event.impl.OutboxEvent;
-import org.hibernate.search.mapper.orm.outboxpolling.event.impl.OutboxPollingOutboxEventAdditionalJaxbMappingProducer;
+import org.hibernate.search.mapper.orm.outboxpolling.event.impl.OutboxPollingOutboxEventAdditionalMappingProducer;
public class OutboxPollingTestUtils {
@@ -50,7 +50,7 @@ public static void awaitAgentsRunning(EntityManager entityManager, UserTransacti
.atMost(Duration.ofSeconds(10)) // CI can be rather slow...
.untilAsserted(() -> inTransaction(userTransaction, () -> {
List agents = entityManager
- .createQuery("select a from " + OutboxPollingAgentAdditionalJaxbMappingProducer.ENTITY_NAME
+ .createQuery("select a from " + OutboxPollingAgentAdditionalMappingProducer.ENTITY_NAME
+ " a order by a.id", Agent.class)
.getResultList();
assertThat(agents)
@@ -69,7 +69,7 @@ public static void awaitNoMoreOutboxEvents(EntityManager entityManager, UserTran
.atMost(Duration.ofSeconds(20)) // CI can be rather slow...
.untilAsserted(() -> inTransaction(userTransaction, () -> {
List events = entityManager
- .createQuery("select e from " + OutboxPollingOutboxEventAdditionalJaxbMappingProducer.ENTITY_NAME
+ .createQuery("select e from " + OutboxPollingOutboxEventAdditionalMappingProducer.ENTITY_NAME
+ " e order by e.id", OutboxEvent.class)
.getResultList();
assertThat(events).isEmpty();
diff --git a/integration-tests/hibernate-search-orm-elasticsearch-outbox-polling/src/main/resources/application.properties b/integration-tests/hibernate-search-orm-elasticsearch-outbox-polling/src/main/resources/application.properties
index 1a3d1932ea644..40e99985d8a6f 100644
--- a/integration-tests/hibernate-search-orm-elasticsearch-outbox-polling/src/main/resources/application.properties
+++ b/integration-tests/hibernate-search-orm-elasticsearch-outbox-polling/src/main/resources/application.properties
@@ -6,7 +6,7 @@ quarkus.datasource.jdbc.max-size=8
quarkus.hibernate-orm.schema-management.strategy=drop-and-create
-quarkus.hibernate-search-orm.elasticsearch.version=8
+quarkus.hibernate-search-orm.elasticsearch.version=9
quarkus.hibernate-search-orm.elasticsearch.hosts=${elasticsearch.hosts:localhost:9200}
quarkus.hibernate-search-orm.elasticsearch.protocol=${elasticsearch.protocol:http}
quarkus.hibernate-search-orm.schema-management.strategy=drop-and-create-and-drop
diff --git a/integration-tests/hibernate-search-orm-elasticsearch-tenancy/src/main/resources/application.properties b/integration-tests/hibernate-search-orm-elasticsearch-tenancy/src/main/resources/application.properties
index 4aca47a9d64ab..78760c34531ee 100644
--- a/integration-tests/hibernate-search-orm-elasticsearch-tenancy/src/main/resources/application.properties
+++ b/integration-tests/hibernate-search-orm-elasticsearch-tenancy/src/main/resources/application.properties
@@ -7,7 +7,7 @@ quarkus.hibernate-orm.schema-management.strategy=none
quarkus.hibernate-orm.multitenant=schema
quarkus.hibernate-orm.packages=io.quarkus.it.hibernate.search.orm.elasticsearch.multitenancy.fruit
-quarkus.hibernate-search-orm.elasticsearch.version=8
+quarkus.hibernate-search-orm.elasticsearch.version=9
quarkus.hibernate-search-orm.elasticsearch.hosts=${elasticsearch.hosts:localhost:9200}
quarkus.hibernate-search-orm.elasticsearch.protocol=${elasticsearch.protocol:http}
quarkus.hibernate-search-orm.schema-management.strategy=drop-and-create-and-drop
@@ -19,8 +19,8 @@ quarkus.hibernate-orm."books".schema-management.strategy=none
quarkus.hibernate-orm."books".multitenant=schema
quarkus.hibernate-orm."books".packages=io.quarkus.it.hibernate.search.orm.elasticsearch.multitenancy.book
-quarkus.hibernate-search-orm."books".elasticsearch.version=8
+quarkus.hibernate-search-orm."books".elasticsearch.version=9
quarkus.hibernate-search-orm."books".elasticsearch.hosts=${elasticsearch.hosts:localhost:9200}
quarkus.hibernate-search-orm."books".elasticsearch.protocol=${elasticsearch.protocol:http}
quarkus.hibernate-search-orm."books".schema-management.strategy=drop-and-create-and-drop
-quarkus.hibernate-search-orm."books".indexing.plan.synchronization.strategy=sync
\ No newline at end of file
+quarkus.hibernate-search-orm."books".indexing.plan.synchronization.strategy=sync
diff --git a/integration-tests/hibernate-search-orm-elasticsearch/src/main/resources/application.properties b/integration-tests/hibernate-search-orm-elasticsearch/src/main/resources/application.properties
index 55e8313f7722c..7666bb0b9d8cb 100644
--- a/integration-tests/hibernate-search-orm-elasticsearch/src/main/resources/application.properties
+++ b/integration-tests/hibernate-search-orm-elasticsearch/src/main/resources/application.properties
@@ -6,7 +6,7 @@ quarkus.datasource.jdbc.max-size=8
quarkus.hibernate-orm.schema-management.strategy=drop-and-create
quarkus.hibernate-search-orm.mapping.configurer=bean:custom-dependent-bean-mapping-configurer,class:io.quarkus.it.hibernate.search.orm.elasticsearch.mapping.CustomClassMappingConfigurer,bean:custom-application-bean-mapping-configurer
-quarkus.hibernate-search-orm.elasticsearch.version=8
+quarkus.hibernate-search-orm.elasticsearch.version=9
quarkus.hibernate-search-orm.elasticsearch.analysis.configurer=bean:backend-analysis
quarkus.hibernate-search-orm.elasticsearch.indexes.Analysis1TestingEntity.analysis.configurer=class:io.quarkus.it.hibernate.search.orm.elasticsearch.analysis.IndexAnalysis1Configurer
quarkus.hibernate-search-orm.elasticsearch.indexes.Analysis2TestingEntity.analysis.configurer=bean:index-analysis-2
diff --git a/integration-tests/hibernate-search-orm-elasticsearch/src/test/java/io/quarkus/it/hibernate/search/orm/elasticsearch/devservices/HibernateSearchElasticsearchDevServicesDisabledExplicitlyTest.java b/integration-tests/hibernate-search-orm-elasticsearch/src/test/java/io/quarkus/it/hibernate/search/orm/elasticsearch/devservices/HibernateSearchElasticsearchDevServicesDisabledExplicitlyTest.java
index 86a17a4c8b7b6..9f4a906150e30 100644
--- a/integration-tests/hibernate-search-orm-elasticsearch/src/test/java/io/quarkus/it/hibernate/search/orm/elasticsearch/devservices/HibernateSearchElasticsearchDevServicesDisabledExplicitlyTest.java
+++ b/integration-tests/hibernate-search-orm-elasticsearch/src/test/java/io/quarkus/it/hibernate/search/orm/elasticsearch/devservices/HibernateSearchElasticsearchDevServicesDisabledExplicitlyTest.java
@@ -37,7 +37,7 @@ public Map getConfigOverrides() {
// But here it doesn't matter as we won't send a request to Elasticsearch anyway,
// so we're free to put anything.
// Just make sure to set something consistent with what we have in application.properties.
- "quarkus.hibernate-search-orm.elasticsearch.version", "8.18"));
+ "quarkus.hibernate-search-orm.elasticsearch.version", "9.0"));
return config;
}
diff --git a/integration-tests/hibernate-search-orm-elasticsearch/src/test/java/io/quarkus/it/hibernate/search/orm/elasticsearch/devservices/HibernateSearchElasticsearchDevServicesDisabledImplicitlyTest.java b/integration-tests/hibernate-search-orm-elasticsearch/src/test/java/io/quarkus/it/hibernate/search/orm/elasticsearch/devservices/HibernateSearchElasticsearchDevServicesDisabledImplicitlyTest.java
index 807b2295a87ad..58e7751c9754e 100644
--- a/integration-tests/hibernate-search-orm-elasticsearch/src/test/java/io/quarkus/it/hibernate/search/orm/elasticsearch/devservices/HibernateSearchElasticsearchDevServicesDisabledImplicitlyTest.java
+++ b/integration-tests/hibernate-search-orm-elasticsearch/src/test/java/io/quarkus/it/hibernate/search/orm/elasticsearch/devservices/HibernateSearchElasticsearchDevServicesDisabledImplicitlyTest.java
@@ -36,7 +36,7 @@ public Map getConfigOverrides() {
// But here it doesn't matter as we won't send a request to Elasticsearch anyway,
// so we're free to put anything.
// Just make sure to set something consistent with what we have in application.properties.
- "quarkus.hibernate-search-orm.elasticsearch.version", "8.18");
+ "quarkus.hibernate-search-orm.elasticsearch.version", "9.0");
}
@Override
diff --git a/integration-tests/hibernate-search-orm-opensearch/src/main/resources/application.properties b/integration-tests/hibernate-search-orm-opensearch/src/main/resources/application.properties
index 036abdc72d53e..0cfbc818959c8 100644
--- a/integration-tests/hibernate-search-orm-opensearch/src/main/resources/application.properties
+++ b/integration-tests/hibernate-search-orm-opensearch/src/main/resources/application.properties
@@ -6,7 +6,7 @@ quarkus.datasource.jdbc.max-size=8
quarkus.hibernate-orm.schema-management.strategy=drop-and-create
-quarkus.hibernate-search-orm.elasticsearch.version=opensearch:2
+quarkus.hibernate-search-orm.elasticsearch.version=opensearch:3
quarkus.hibernate-search-orm.elasticsearch.analysis.configurer=bean:backend-analysis
quarkus.hibernate-search-orm.schema-management.strategy=drop-and-create-and-drop
quarkus.hibernate-search-orm.indexing.plan.synchronization.strategy=sync
@@ -17,4 +17,4 @@ quarkus.hibernate-search-orm.indexing.plan.synchronization.strategy=sync
# See io.quarkus.it.hibernate.search.orm.opensearch.devservices.HibernateSearchOpenSearchDevServicesEnabledImplicitlyTest.testHibernateSearch
%test.quarkus.hibernate-search-orm.schema-management.strategy=drop-and-create
%test.quarkus.hibernate-search-orm.elasticsearch.hosts=${opensearch.hosts:localhost:9200}
-%test.quarkus.hibernate-search-orm.elasticsearch.protocol=${opensearch.protocol:http}
\ No newline at end of file
+%test.quarkus.hibernate-search-orm.elasticsearch.protocol=${opensearch.protocol:http}
diff --git a/integration-tests/hibernate-search-orm-opensearch/src/test/java/io/quarkus/it/hibernate/search/orm/opensearch/devservices/HibernateSearchOpenSearchDevServicesDisabledExplicitlyTest.java b/integration-tests/hibernate-search-orm-opensearch/src/test/java/io/quarkus/it/hibernate/search/orm/opensearch/devservices/HibernateSearchOpenSearchDevServicesDisabledExplicitlyTest.java
index 2aadb26c771ad..225873e6c30b6 100644
--- a/integration-tests/hibernate-search-orm-opensearch/src/test/java/io/quarkus/it/hibernate/search/orm/opensearch/devservices/HibernateSearchOpenSearchDevServicesDisabledExplicitlyTest.java
+++ b/integration-tests/hibernate-search-orm-opensearch/src/test/java/io/quarkus/it/hibernate/search/orm/opensearch/devservices/HibernateSearchOpenSearchDevServicesDisabledExplicitlyTest.java
@@ -37,7 +37,7 @@ public Map getConfigOverrides() {
// But here it doesn't matter as we won't send a request to OpenSearch anyway,
// so we're free to put anything.
// Just make sure to set something consistent with what we have in application.properties.
- "quarkus.hibernate-search-orm.elasticsearch.version", "opensearch:2.16"));
+ "quarkus.hibernate-search-orm.elasticsearch.version", "opensearch:3.0"));
return config;
}
diff --git a/integration-tests/hibernate-search-orm-opensearch/src/test/java/io/quarkus/it/hibernate/search/orm/opensearch/devservices/HibernateSearchOpenSearchDevServicesDisabledImplicitlyTest.java b/integration-tests/hibernate-search-orm-opensearch/src/test/java/io/quarkus/it/hibernate/search/orm/opensearch/devservices/HibernateSearchOpenSearchDevServicesDisabledImplicitlyTest.java
index 80163bbff07e1..858ef8c089ee2 100644
--- a/integration-tests/hibernate-search-orm-opensearch/src/test/java/io/quarkus/it/hibernate/search/orm/opensearch/devservices/HibernateSearchOpenSearchDevServicesDisabledImplicitlyTest.java
+++ b/integration-tests/hibernate-search-orm-opensearch/src/test/java/io/quarkus/it/hibernate/search/orm/opensearch/devservices/HibernateSearchOpenSearchDevServicesDisabledImplicitlyTest.java
@@ -36,7 +36,7 @@ public Map getConfigOverrides() {
// But here it doesn't matter as we won't send a request to OpenSearch anyway,
// so we're free to put anything.
// Just make sure to set something consistent with what we have in application.properties.
- "quarkus.hibernate-search-orm.elasticsearch.version", "opensearch:2.16");
+ "quarkus.hibernate-search-orm.elasticsearch.version", "opensearch:3.0");
}
@Override
diff --git a/integration-tests/hibernate-search-standalone-elasticsearch/src/main/java/io/quarkus/it/hibernate/search/standalone/elasticsearch/search/MyMassLoadingStrategy.java b/integration-tests/hibernate-search-standalone-elasticsearch/src/main/java/io/quarkus/it/hibernate/search/standalone/elasticsearch/search/MyMassLoadingStrategy.java
index a3494e5eda0b3..4de5d8dc95f93 100644
--- a/integration-tests/hibernate-search-standalone-elasticsearch/src/main/java/io/quarkus/it/hibernate/search/standalone/elasticsearch/search/MyMassLoadingStrategy.java
+++ b/integration-tests/hibernate-search-standalone-elasticsearch/src/main/java/io/quarkus/it/hibernate/search/standalone/elasticsearch/search/MyMassLoadingStrategy.java
@@ -8,6 +8,7 @@
import java.util.Collection;
import java.util.List;
+import java.util.OptionalLong;
import org.hibernate.search.mapper.pojo.standalone.loading.LoadingTypeGroup;
import org.hibernate.search.mapper.pojo.standalone.loading.MassEntityLoader;
@@ -49,8 +50,8 @@ public void close() {
}
@Override
- public long totalCount() {
- return connection.countEntities(typeFilter);
+ public OptionalLong totalCount() {
+ return OptionalLong.of(connection.countEntities(typeFilter));
}
@Override
diff --git a/integration-tests/hibernate-search-standalone-elasticsearch/src/main/resources/application.properties b/integration-tests/hibernate-search-standalone-elasticsearch/src/main/resources/application.properties
index df37b5c1288f0..3264612f01afa 100644
--- a/integration-tests/hibernate-search-standalone-elasticsearch/src/main/resources/application.properties
+++ b/integration-tests/hibernate-search-standalone-elasticsearch/src/main/resources/application.properties
@@ -1,6 +1,6 @@
quarkus.ssl.native = false
-quarkus.hibernate-search-standalone.elasticsearch.version=8
+quarkus.hibernate-search-standalone.elasticsearch.version=9
quarkus.hibernate-search-standalone.indexing.plan.synchronization.strategy=sync
quarkus.hibernate-search-standalone.schema-management.strategy=drop-and-create-and-drop
@@ -11,4 +11,4 @@ quarkus.hibernate-search-standalone.schema-management.strategy=drop-and-create-a
# we want to enable management so that we can access Hibernate Search management endpoints:
quarkus.management.enabled=true
# now enable the Hibernate Search management itself:
-quarkus.hibernate-search-standalone.management.enabled=true
\ No newline at end of file
+quarkus.hibernate-search-standalone.management.enabled=true
diff --git a/integration-tests/hibernate-search-standalone-elasticsearch/src/test/java/io/quarkus/it/hibernate/search/standalone/elasticsearch/devservices/HibernateSearchElasticsearchDevServicesDisabledExplicitlyTest.java b/integration-tests/hibernate-search-standalone-elasticsearch/src/test/java/io/quarkus/it/hibernate/search/standalone/elasticsearch/devservices/HibernateSearchElasticsearchDevServicesDisabledExplicitlyTest.java
index 08dca1b15f5c6..59f21e1be3a97 100644
--- a/integration-tests/hibernate-search-standalone-elasticsearch/src/test/java/io/quarkus/it/hibernate/search/standalone/elasticsearch/devservices/HibernateSearchElasticsearchDevServicesDisabledExplicitlyTest.java
+++ b/integration-tests/hibernate-search-standalone-elasticsearch/src/test/java/io/quarkus/it/hibernate/search/standalone/elasticsearch/devservices/HibernateSearchElasticsearchDevServicesDisabledExplicitlyTest.java
@@ -37,7 +37,7 @@ public Map getConfigOverrides() {
// But here it doesn't matter as we won't send a request to Elasticsearch anyway,
// so we're free to put anything.
// Just make sure to set something consistent with what we have in application.properties.
- "quarkus.hibernate-search-standalone.elasticsearch.version", "8.18"));
+ "quarkus.hibernate-search-standalone.elasticsearch.version", "9.0"));
return config;
}
diff --git a/integration-tests/hibernate-search-standalone-elasticsearch/src/test/java/io/quarkus/it/hibernate/search/standalone/elasticsearch/devservices/HibernateSearchElasticsearchDevServicesDisabledImplicitlyTest.java b/integration-tests/hibernate-search-standalone-elasticsearch/src/test/java/io/quarkus/it/hibernate/search/standalone/elasticsearch/devservices/HibernateSearchElasticsearchDevServicesDisabledImplicitlyTest.java
index 91a2d0940e430..7081b36a62a1f 100644
--- a/integration-tests/hibernate-search-standalone-elasticsearch/src/test/java/io/quarkus/it/hibernate/search/standalone/elasticsearch/devservices/HibernateSearchElasticsearchDevServicesDisabledImplicitlyTest.java
+++ b/integration-tests/hibernate-search-standalone-elasticsearch/src/test/java/io/quarkus/it/hibernate/search/standalone/elasticsearch/devservices/HibernateSearchElasticsearchDevServicesDisabledImplicitlyTest.java
@@ -36,7 +36,7 @@ public Map getConfigOverrides() {
// But here it doesn't matter as we won't send a request to Elasticsearch anyway,
// so we're free to put anything.
// Just make sure to set something consistent with what we have in application.properties.
- "quarkus.hibernate-search-standalone.elasticsearch.version", "8.18");
+ "quarkus.hibernate-search-standalone.elasticsearch.version", "9.0");
}
@Override
diff --git a/integration-tests/hibernate-search-standalone-opensearch/src/main/resources/application.properties b/integration-tests/hibernate-search-standalone-opensearch/src/main/resources/application.properties
index cfa6d154f6234..729c7c489d33b 100644
--- a/integration-tests/hibernate-search-standalone-opensearch/src/main/resources/application.properties
+++ b/integration-tests/hibernate-search-standalone-opensearch/src/main/resources/application.properties
@@ -1,8 +1,8 @@
quarkus.ssl.native = false
-quarkus.hibernate-search-standalone.elasticsearch.version=opensearch:2
+quarkus.hibernate-search-standalone.elasticsearch.version=opensearch:3
quarkus.hibernate-search-standalone.indexing.plan.synchronization.strategy=sync
%test.quarkus.hibernate-search-standalone.schema-management.strategy=drop-and-create-and-drop
%test.quarkus.hibernate-search-standalone.elasticsearch.hosts=${elasticsearch.hosts:localhost:9200}
-%test.quarkus.hibernate-search-standalone.elasticsearch.protocol=${elasticsearch.protocol:http}
\ No newline at end of file
+%test.quarkus.hibernate-search-standalone.elasticsearch.protocol=${elasticsearch.protocol:http}
diff --git a/integration-tests/hibernate-search-standalone-opensearch/src/test/java/io/quarkus/it/hibernate/search/standalone/opensearch/devservices/HibernateSearchOpenSearchDevServicesDisabledExplicitlyTest.java b/integration-tests/hibernate-search-standalone-opensearch/src/test/java/io/quarkus/it/hibernate/search/standalone/opensearch/devservices/HibernateSearchOpenSearchDevServicesDisabledExplicitlyTest.java
index a794bb91c0cdc..5cb8f8a3e3d24 100644
--- a/integration-tests/hibernate-search-standalone-opensearch/src/test/java/io/quarkus/it/hibernate/search/standalone/opensearch/devservices/HibernateSearchOpenSearchDevServicesDisabledExplicitlyTest.java
+++ b/integration-tests/hibernate-search-standalone-opensearch/src/test/java/io/quarkus/it/hibernate/search/standalone/opensearch/devservices/HibernateSearchOpenSearchDevServicesDisabledExplicitlyTest.java
@@ -37,7 +37,7 @@ public Map getConfigOverrides() {
// But here it doesn't matter as we won't send a request to OpenSearch anyway,
// so we're free to put anything.
// Just make sure to set something consistent with what we have in application.properties.
- "quarkus.hibernate-search-standalone.elasticsearch.version", "opensearch:2.16"));
+ "quarkus.hibernate-search-standalone.elasticsearch.version", "opensearch:3.0"));
return config;
}
diff --git a/integration-tests/hibernate-search-standalone-opensearch/src/test/java/io/quarkus/it/hibernate/search/standalone/opensearch/devservices/HibernateSearchOpenSearchDevServicesDisabledImplicitlyTest.java b/integration-tests/hibernate-search-standalone-opensearch/src/test/java/io/quarkus/it/hibernate/search/standalone/opensearch/devservices/HibernateSearchOpenSearchDevServicesDisabledImplicitlyTest.java
index 246a745b10f86..945362a08bf29 100644
--- a/integration-tests/hibernate-search-standalone-opensearch/src/test/java/io/quarkus/it/hibernate/search/standalone/opensearch/devservices/HibernateSearchOpenSearchDevServicesDisabledImplicitlyTest.java
+++ b/integration-tests/hibernate-search-standalone-opensearch/src/test/java/io/quarkus/it/hibernate/search/standalone/opensearch/devservices/HibernateSearchOpenSearchDevServicesDisabledImplicitlyTest.java
@@ -36,7 +36,7 @@ public Map getConfigOverrides() {
// But here it doesn't matter as we won't send a request to OpenSearch anyway,
// so we're free to put anything.
// Just make sure to set something consistent with what we have in application.properties.
- "quarkus.hibernate-search-standalone.elasticsearch.version", "opensearch:2.16");
+ "quarkus.hibernate-search-standalone.elasticsearch.version", "opensearch:3.0");
}
@Override
diff --git a/integration-tests/jpa-mapping-xml/legacy-app/src/main/java/io/quarkus/it/jpa/mapping/xml/legacy/app/SchemaUtil.java b/integration-tests/jpa-mapping-xml/legacy-app/src/main/java/io/quarkus/it/jpa/mapping/xml/legacy/app/SchemaUtil.java
index bf4ede5b91fe5..14bb4691ec995 100644
--- a/integration-tests/jpa-mapping-xml/legacy-app/src/main/java/io/quarkus/it/jpa/mapping/xml/legacy/app/SchemaUtil.java
+++ b/integration-tests/jpa-mapping-xml/legacy-app/src/main/java/io/quarkus/it/jpa/mapping/xml/legacy/app/SchemaUtil.java
@@ -7,7 +7,6 @@
import jakarta.persistence.EntityManagerFactory;
import org.hibernate.engine.spi.SessionFactoryImplementor;
-import org.hibernate.persister.entity.AbstractEntityPersister;
public final class SchemaUtil {
@@ -16,9 +15,9 @@ private SchemaUtil() {
public static Set getColumnNames(EntityManagerFactory entityManagerFactory, Class> entityType) {
Set result = new HashSet<>();
- AbstractEntityPersister persister = (AbstractEntityPersister) entityManagerFactory
- .unwrap(SessionFactoryImplementor.class)
- .getMetamodel().entityPersister(entityType);
+ var persister = entityManagerFactory.unwrap(SessionFactoryImplementor.class)
+ .getMappingMetamodel()
+ .getEntityDescriptor(entityType);
if (persister == null) {
return result;
}
diff --git a/integration-tests/jpa-mapping-xml/modern-app/src/main/java/io/quarkus/it/jpa/mapping/xml/modern/app/SchemaUtil.java b/integration-tests/jpa-mapping-xml/modern-app/src/main/java/io/quarkus/it/jpa/mapping/xml/modern/app/SchemaUtil.java
index 6a2bf1e9df028..615bc1660f4e0 100644
--- a/integration-tests/jpa-mapping-xml/modern-app/src/main/java/io/quarkus/it/jpa/mapping/xml/modern/app/SchemaUtil.java
+++ b/integration-tests/jpa-mapping-xml/modern-app/src/main/java/io/quarkus/it/jpa/mapping/xml/modern/app/SchemaUtil.java
@@ -7,7 +7,6 @@
import jakarta.persistence.EntityManagerFactory;
import org.hibernate.engine.spi.SessionFactoryImplementor;
-import org.hibernate.persister.entity.AbstractEntityPersister;
public final class SchemaUtil {
@@ -16,9 +15,9 @@ private SchemaUtil() {
public static Set getColumnNames(EntityManagerFactory entityManagerFactory, Class> entityType) {
Set result = new HashSet<>();
- AbstractEntityPersister persister = (AbstractEntityPersister) entityManagerFactory
- .unwrap(SessionFactoryImplementor.class)
- .getMetamodel().entityPersister(entityType);
+ var persister = entityManagerFactory.unwrap(SessionFactoryImplementor.class)
+ .getMappingMetamodel()
+ .getEntityDescriptor(entityType);
if (persister == null) {
return result;
}
diff --git a/integration-tests/jpa-postgresql/src/main/java/io/quarkus/it/jpa/postgresql/defaultpu/Person.java b/integration-tests/jpa-postgresql/src/main/java/io/quarkus/it/jpa/postgresql/defaultpu/Person.java
index 22b6dfa87c7b6..68d171398f914 100644
--- a/integration-tests/jpa-postgresql/src/main/java/io/quarkus/it/jpa/postgresql/defaultpu/Person.java
+++ b/integration-tests/jpa-postgresql/src/main/java/io/quarkus/it/jpa/postgresql/defaultpu/Person.java
@@ -1,5 +1,7 @@
package io.quarkus.it.jpa.postgresql.defaultpu;
+import static org.hibernate.type.SqlTypes.INTERVAL_SECOND;
+
import java.time.Duration;
import jakarta.persistence.CascadeType;
@@ -13,8 +15,7 @@
import jakarta.persistence.NamedQuery;
import jakarta.persistence.Table;
-import org.hibernate.annotations.JdbcType;
-import org.hibernate.dialect.PostgreSQLIntervalSecondJdbcType;
+import org.hibernate.annotations.JdbcTypeCode;
@Entity
@Table(schema = "myschema")
@@ -78,9 +79,7 @@ public void setStatus(Status status) {
* @see org.hibernate.type.descriptor.sql.internal.Scale6IntervalSecondDdlType
*/
@Column(precision = 5, scale = 5)
- //NOTE: while https://hibernate.atlassian.net/browse/HHH-16591 is open we cannot replace the currently used @JdbcType annotation
- // with a @JdbcTypeCode( INTERVAL_SECOND )
- @JdbcType(PostgreSQLIntervalSecondJdbcType.class)
+ @JdbcTypeCode(INTERVAL_SECOND)
public Duration getLatestLunchBreakDuration() {
return latestLunchBreakDuration;
}
diff --git a/integration-tests/jpa/src/main/java/io/quarkus/it/jpa/integrator/TestIntegrator.java b/integration-tests/jpa/src/main/java/io/quarkus/it/jpa/integrator/TestIntegrator.java
index 60b171b7355c0..086d5726d9ca9 100644
--- a/integration-tests/jpa/src/main/java/io/quarkus/it/jpa/integrator/TestIntegrator.java
+++ b/integration-tests/jpa/src/main/java/io/quarkus/it/jpa/integrator/TestIntegrator.java
@@ -3,6 +3,7 @@
import java.util.concurrent.atomic.AtomicInteger;
import org.hibernate.boot.Metadata;
+import org.hibernate.boot.spi.BootstrapContext;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.integrator.spi.Integrator;
import org.hibernate.service.spi.SessionFactoryServiceRegistry;
@@ -11,8 +12,8 @@ public class TestIntegrator implements Integrator {
public static final AtomicInteger COUNTER = new AtomicInteger();
@Override
- public void integrate(Metadata metadata, SessionFactoryImplementor sessionFactory,
- SessionFactoryServiceRegistry serviceRegistry) {
+ public void integrate(Metadata metadata, BootstrapContext bootstrapContext,
+ SessionFactoryImplementor sessionFactory) {
COUNTER.incrementAndGet();
}
diff --git a/integration-tests/jpa/src/main/java/io/quarkus/it/jpa/proxy/Dog.java b/integration-tests/jpa/src/main/java/io/quarkus/it/jpa/proxy/Dog.java
index 30e16e8356b2a..724d6be1e6e5a 100644
--- a/integration-tests/jpa/src/main/java/io/quarkus/it/jpa/proxy/Dog.java
+++ b/integration-tests/jpa/src/main/java/io/quarkus/it/jpa/proxy/Dog.java
@@ -3,10 +3,7 @@
import jakarta.persistence.DiscriminatorValue;
import jakarta.persistence.Entity;
-import org.hibernate.annotations.Proxy;
-
@Entity
-@Proxy(proxyClass = DogProxy.class)
@DiscriminatorValue("DOG")
public class Dog extends Pet implements DogProxy {
diff --git a/integration-tests/jpa/src/main/java/io/quarkus/it/jpa/proxy/Pet.java b/integration-tests/jpa/src/main/java/io/quarkus/it/jpa/proxy/Pet.java
index 8da2622a49b81..c2b983a45152d 100644
--- a/integration-tests/jpa/src/main/java/io/quarkus/it/jpa/proxy/Pet.java
+++ b/integration-tests/jpa/src/main/java/io/quarkus/it/jpa/proxy/Pet.java
@@ -6,11 +6,11 @@
import jakarta.persistence.Id;
import jakarta.persistence.Inheritance;
-import org.hibernate.annotations.Proxy;
+import org.hibernate.annotations.ConcreteProxy;
@Inheritance()
@DiscriminatorColumn
-@Proxy(proxyClass = PetProxy.class)
+@ConcreteProxy
@DiscriminatorValue("PET")
@Entity
public class Pet implements PetProxy {
diff --git a/integration-tests/jpa/src/main/java/io/quarkus/it/jpa/proxy/ProxyTestEndpoint.java b/integration-tests/jpa/src/main/java/io/quarkus/it/jpa/proxy/ProxyTestEndpoint.java
index be2a1564d561f..570334dce2930 100644
--- a/integration-tests/jpa/src/main/java/io/quarkus/it/jpa/proxy/ProxyTestEndpoint.java
+++ b/integration-tests/jpa/src/main/java/io/quarkus/it/jpa/proxy/ProxyTestEndpoint.java
@@ -90,28 +90,27 @@ public String inheritance() {
PetOwner owner = entityManager.find(PetOwner.class, 1);
expectEquals("Stuart", owner.getName());
expectEquals("Generic pet noises", owner.getPet().makeNoise());
- expectFalse(owner.getPet() instanceof Pet);
- expectTrue(owner.getPet() instanceof DogProxy); //even though it is not a dog it still should implement the interface
+
+ // Concrete proxies extend the actual class of the target entity
+ expectTrue(owner.getPet() instanceof Pet);
+ expectFalse(owner.getPet() instanceof DogProxy);
owner = entityManager.find(PetOwner.class, 2);
expectEquals("Sanne", owner.getName());
expectEquals("Meow", owner.getPet().makeNoise());
- DogProxy dogProxy = (DogProxy) owner.getPet();
- try {
- dogProxy.bark();
- throw new RuntimeException("Should have failed as not a dog");
- } catch (ClassCastException e) {
-
- }
- expectFalse(owner.getPet() instanceof Pet);
+ // Concrete proxies extend the actual class of the target entity
+ expectTrue(owner.getPet() instanceof Pet);
+ expectFalse(owner.getPet() instanceof DogProxy);
owner = entityManager.find(PetOwner.class, 3);
expectEquals("Emmanuel", owner.getName());
expectEquals("Woof", owner.getPet().makeNoise());
expectEquals("Woof", ((DogProxy) owner.getPet()).bark());
expectEquals("Rubber Bone", ((DogProxy) owner.getPet()).getFavoriteToy());
- expectFalse(owner.getPet() instanceof Pet);
+
+ // Concrete proxies extend the actual class of the target entity
+ expectTrue(owner.getPet() instanceof Pet);
expectTrue(owner.getPet() instanceof DogProxy);
return "OK";
diff --git a/integration-tests/maven/src/test/resources-filtered/projects/apt-in-annotation-processor-paths/pom.xml b/integration-tests/maven/src/test/resources-filtered/projects/apt-in-annotation-processor-paths/pom.xml
index d1d8df1882029..5ccf1727b91d3 100644
--- a/integration-tests/maven/src/test/resources-filtered/projects/apt-in-annotation-processor-paths/pom.xml
+++ b/integration-tests/maven/src/test/resources-filtered/projects/apt-in-annotation-processor-paths/pom.xml
@@ -64,7 +64,7 @@
org.hibernate.orm
- hibernate-jpamodelgen
+ hibernate-processor
com.querydsl
diff --git a/integration-tests/maven/src/test/resources-filtered/projects/apt-in-annotation-processors/pom.xml b/integration-tests/maven/src/test/resources-filtered/projects/apt-in-annotation-processors/pom.xml
index 6204f590a11d8..8b8d2d3bf3076 100644
--- a/integration-tests/maven/src/test/resources-filtered/projects/apt-in-annotation-processors/pom.xml
+++ b/integration-tests/maven/src/test/resources-filtered/projects/apt-in-annotation-processors/pom.xml
@@ -65,7 +65,7 @@
org.hibernate.orm
- hibernate-jpamodelgen
+ hibernate-processor
com.querydsl
@@ -76,7 +76,7 @@
- org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor
+ org.hibernate.processor.HibernateProcessor
diff --git a/integration-tests/maven/src/test/resources-filtered/projects/apt-in-classpath/pom.xml b/integration-tests/maven/src/test/resources-filtered/projects/apt-in-classpath/pom.xml
index 2b8eed57eb392..b19864da41e08 100644
--- a/integration-tests/maven/src/test/resources-filtered/projects/apt-in-classpath/pom.xml
+++ b/integration-tests/maven/src/test/resources-filtered/projects/apt-in-classpath/pom.xml
@@ -47,7 +47,7 @@
org.hibernate.orm
- hibernate-jpamodelgen
+ hibernate-processor
provided
diff --git a/pom.xml b/pom.xml
index 98c2c00546576..e2f74d2f9a50c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -71,14 +71,14 @@
0.8.13
7.3.1
5.5.5
- 6.6.17.Final
- 3.1.0
+ 7.0.0.Final
+ 3.2.0
4.13.0
1.15.11
- 7.0.3.Final
- 2.4.8.Final
+ 1.0.0
+ 3.0.0.Final
9.0.0.Final
- 7.2.4.Final
+ 8.0.0.Final
1.69.1