diff --git a/bom/application/pom.xml b/bom/application/pom.xml
index 2c1f4e14984b7..3c4e3e4ed6043 100644
--- a/bom/application/pom.xml
+++ b/bom/application/pom.xml
@@ -76,7 +76,7 @@
2.1.3
3.0.1
2.0.1
- 3.1.0
+ 3.2.0
2.1.0
6.0.0
2.0.1
@@ -1154,6 +1154,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
@@ -5341,10 +5351,11 @@
${hibernate-orm.version}
-
+
+
diff --git a/devtools/bom-descriptor-json/pom.xml b/devtools/bom-descriptor-json/pom.xml
index 59f92096d0541..cd67dd251cafa 100644
--- a/devtools/bom-descriptor-json/pom.xml
+++ b/devtools/bom-descriptor-json/pom.xml
@@ -837,6 +837,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 29dd7a55c0a9f..da886422f6ff2 100644
--- a/docs/pom.xml
+++ b/docs/pom.xml
@@ -848,6 +848,19 @@
+
+ io.quarkus
+ quarkus-hibernate-orm-derby-deployment
+ ${project.version}
+ pom
+ test
+
+
+ *
+ *
+
+
+
io.quarkus
quarkus-hibernate-orm-panache-deployment
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..96713e5cf2153
--- /dev/null
+++ b/extensions/hibernate-orm-derby/deployment/src/main/java/HibernateOrmDerbyProcessor.java
@@ -0,0 +1,14 @@
+import java.util.Set;
+
+import io.quarkus.datasource.common.runtime.DatabaseKind;
+import io.quarkus.deployment.annotations.BuildProducer;
+import io.quarkus.deployment.annotations.BuildStep;
+import io.quarkus.hibernate.orm.deployment.spi.DatabaseKindDialectBuildItem;
+
+public final class HibernateOrmDerbyProcessor {
+ @BuildStep
+ void registerHibernateOrmMetadataForDerbyDialect(BuildProducer producer) {
+ producer.produce(DatabaseKindDialectBuildItem.forCoreDialect(DatabaseKind.DERBY, "Apache Derby",
+ Set.of("org.hibernate.community.dialect.DerbyDialect")));
+ }
+}
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..5dcf5cf656c0c
--- /dev/null
+++ b/extensions/hibernate-orm-derby/runtime/pom.xml
@@ -0,0 +1,69 @@
+
+
+
+ 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-hibernate-orm
+ 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/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 3f79f8d71ba34..5181b06374143 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");
@@ -61,6 +60,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"),
@@ -78,10 +78,7 @@ private static DotName createConstant(String fqcn) {
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.id.uuid.UuidGenerator"));
public static final List PACKAGE_ANNOTATIONS = List.of(
createConstant("org.hibernate.annotations.CollectionTypeRegistration"),
@@ -110,7 +107,11 @@ private static DotName createConstant(String fqcn) {
createConstant("org.hibernate.annotations.NamedNativeQuery"),
createConstant("org.hibernate.annotations.NamedQueries"),
createConstant("org.hibernate.annotations.NamedQuery"),
+ createConstant("jakarta.persistence.SequenceGenerator"),
+ createConstant("jakarta.persistence.SequenceGenerators"),
createConstant("org.hibernate.annotations.SoftDelete"),
+ createConstant("jakarta.persistence.TableGenerator"),
+ createConstant("jakarta.persistence.TableGenerators"),
createConstant("org.hibernate.annotations.TypeRegistration"),
createConstant("org.hibernate.annotations.TypeRegistrations"));
@@ -122,6 +123,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"),
@@ -135,6 +137,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"),
@@ -247,6 +250,7 @@ private static DotName createConstant(String fqcn) {
createConstant("org.hibernate.annotations.ConcreteProxy"),
createConstant("org.hibernate.annotations.ConverterRegistration"),
createConstant("org.hibernate.annotations.ConverterRegistrations"),
+ createConstant("org.hibernate.boot.models.Copied"),
createConstant("org.hibernate.annotations.CreationTimestamp"),
createConstant("org.hibernate.annotations.CurrentTimestamp"),
createConstant("org.hibernate.annotations.DialectOverride$Check"),
@@ -283,8 +287,6 @@ 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"),
@@ -304,20 +306,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"),
@@ -329,14 +327,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"),
@@ -360,9 +355,7 @@ private static DotName createConstant(String fqcn) {
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"),
@@ -378,7 +371,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"),
@@ -387,8 +379,6 @@ 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.TenantId"),
createConstant("org.hibernate.annotations.TimeZoneColumn"),
@@ -400,9 +390,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"));
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 2aa61f22adc2f..a1b213404bcb5 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
@@ -50,10 +50,9 @@
import org.hibernate.internal.util.collections.ArrayHelper;
import org.hibernate.jpa.boot.spi.JpaSettings;
import org.hibernate.jpa.boot.spi.PersistenceUnitDescriptor;
-import org.hibernate.loader.BatchFetchStyle;
+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;
@@ -130,6 +129,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.common.deployment.HibernateEnhancersRegisteredBuildItem;
@@ -165,8 +165,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
@@ -256,8 +254,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));
}
}
@@ -976,7 +978,6 @@ private static void producePersistenceUnitDescriptorFromConfig(
if (batchSize > 0) {
descriptor.getProperties().setProperty(AvailableSettings.DEFAULT_BATCH_FETCH_SIZE,
Integer.toString(batchSize));
- descriptor.getProperties().setProperty(AvailableSettings.BATCH_FETCH_STYLE, BatchFetchStyle.PADDED.toString());
}
if (persistenceUnitConfig.fetch().maxDepth().isPresent()) {
@@ -1531,14 +1532,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)) {
@@ -1550,28 +1543,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 d7e2120e2a3c5..daa8d4ddb6a11 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;
@@ -185,32 +179,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);
@@ -220,19 +215,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/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/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 d114c555a330d..a12206a5fd781 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
@@ -2,7 +2,6 @@
import static org.assertj.core.api.Assertions.assertThat;
-import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -14,6 +13,7 @@
import jakarta.persistence.Table;
import jakarta.transaction.UserTransaction;
+import org.hibernate.CallbackException;
import org.hibernate.EmptyInterceptor;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
@@ -124,7 +124,8 @@ public ApplicationScopedInterceptor() {
}
@Override
- public boolean onLoad(Object entity, Serializable 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 3824f3b3eb5bd..89e104be61520 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
@@ -2,7 +2,6 @@
import static org.assertj.core.api.Assertions.assertThat;
-import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -15,6 +14,7 @@
import jakarta.persistence.Table;
import jakarta.transaction.UserTransaction;
+import org.hibernate.CallbackException;
import org.hibernate.EmptyInterceptor;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
@@ -127,7 +127,8 @@ public DependentInterceptor() {
}
@Override
- public boolean onLoad(Object entity, Serializable 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 8878a756c2cb1..f40097ab4c931 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
@@ -3,7 +3,6 @@
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -16,6 +15,7 @@
import jakarta.transaction.TransactionScoped;
import jakarta.transaction.UserTransaction;
+import org.hibernate.CallbackException;
import org.hibernate.EmptyInterceptor;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
@@ -129,7 +129,8 @@ public TransactionScopedInterceptor() {
}
@Override
- public boolean onLoad(Object entity, Serializable 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/MultiplePersistenceUnitsInterceptorTest.java b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/multiplepersistenceunits/MultiplePersistenceUnitsInterceptorTest.java
index 74b7d037bf1c0..f97a17e6ce04e 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
@@ -2,7 +2,6 @@
import static org.assertj.core.api.Assertions.assertThat;
-import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -10,6 +9,7 @@
import jakarta.inject.Inject;
import jakarta.transaction.UserTransaction;
+import org.hibernate.CallbackException;
import org.hibernate.EmptyInterceptor;
import org.hibernate.Session;
import org.hibernate.type.Type;
@@ -116,7 +116,8 @@ public MyDefaultPUInterceptor() {
}
@Override
- public boolean onLoad(Object entity, Serializable 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;
}
@@ -134,7 +135,8 @@ public MyInventoryPUInterceptor() {
}
@Override
- public boolean onLoad(Object entity, Serializable 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/runtime/pom.xml b/extensions/hibernate-orm/runtime/pom.xml
index 205773ecdff7a..1f7f5bbfb550e 100644
--- a/extensions/hibernate-orm/runtime/pom.xml
+++ b/extensions/hibernate-orm/runtime/pom.xml
@@ -66,12 +66,6 @@
byte-buddy
compile
-
-
- org.hibernate.common
- hibernate-commons-annotations
- compile
-
+
+ io.quarkus
+ quarkus-hibernate-orm-derby-deployment
+ true
+
io.quarkus
quarkus-devservices-derby
diff --git a/extensions/jdbc/jdbc-derby/runtime/pom.xml b/extensions/jdbc/jdbc-derby/runtime/pom.xml
index 172374f698b9c..b6fe4d62eda81 100644
--- a/extensions/jdbc/jdbc-derby/runtime/pom.xml
+++ b/extensions/jdbc/jdbc-derby/runtime/pom.xml
@@ -31,6 +31,11 @@
quarkus-flyway-derby
true
+
+ io.quarkus
+ quarkus-hibernate-orm-derby
+ true
+
diff --git a/extensions/pom.xml b/extensions/pom.xml
index c11bbaa9679a1..6af7438fd00ce 100644
--- a/extensions/pom.xml
+++ b/extensions/pom.xml
@@ -95,6 +95,7 @@
agroal
jdbc
hibernate-orm
+ hibernate-orm-derby
hibernate-envers
hibernate-reactive
hibernate-validator
diff --git a/integration-tests/jpa-mapping-xml/modern-app/src/main/resources/application.properties b/integration-tests/jpa-mapping-xml/modern-app/src/main/resources/application.properties
index 6bcd1252cd1b7..70ef10963cf03 100644
--- a/integration-tests/jpa-mapping-xml/modern-app/src/main/resources/application.properties
+++ b/integration-tests/jpa-mapping-xml/modern-app/src/main/resources/application.properties
@@ -22,6 +22,7 @@ quarkus.hibernate-orm.xml-mapping-only-entity-listener.datasource=xml-mapping-on
quarkus.hibernate-orm.xml-mapping-only-entity-listener.database.generation=drop-and-create
quarkus.hibernate-orm.xml-mapping-only-entity-listener.packages=io.quarkus.it.jpa.mapping.xml.modern.app.xmlmappingonly.entitylistener
quarkus.hibernate-orm.xml-mapping-only-entity-listener.mapping-files=xml-mapping-only-entity-listener.orm.xml
+quarkus.hibernate-orm.xml-mapping-only-entity-listener.log.sql=true
quarkus.hibernate-orm.libraryA.datasource=libraryA
quarkus.hibernate-orm.libraryA.database.generation=drop-and-create
diff --git a/integration-tests/jpa-mapping-xml/modern-app/src/main/resources/xml-mapping-only-entity-listener.orm.xml b/integration-tests/jpa-mapping-xml/modern-app/src/main/resources/xml-mapping-only-entity-listener.orm.xml
index 5bc028339b153..8872100212d47 100644
--- a/integration-tests/jpa-mapping-xml/modern-app/src/main/resources/xml-mapping-only-entity-listener.orm.xml
+++ b/integration-tests/jpa-mapping-xml/modern-app/src/main/resources/xml-mapping-only-entity-listener.orm.xml
@@ -17,6 +17,8 @@
+
+
@@ -36,6 +38,8 @@
+
+
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..caec426329513 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,12 +3,9 @@
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 {
+public class Dog extends Pet {
private String favoriteToy;
@@ -17,7 +14,6 @@ public String makeNoise() {
return bark();
}
- @Override
public String bark() {
return "Woof";
}
diff --git a/integration-tests/jpa/src/main/java/io/quarkus/it/jpa/proxy/DogProxy.java b/integration-tests/jpa/src/main/java/io/quarkus/it/jpa/proxy/DogProxy.java
deleted file mode 100644
index d128fee16fe11..0000000000000
--- a/integration-tests/jpa/src/main/java/io/quarkus/it/jpa/proxy/DogProxy.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package io.quarkus.it.jpa.proxy;
-
-public interface DogProxy {
-
- String bark();
-
- String getFavoriteToy();
-
- void setFavoriteToy(String favoriteToy);
-}
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..141ae784e30c3 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,14 +6,11 @@
import jakarta.persistence.Id;
import jakarta.persistence.Inheritance;
-import org.hibernate.annotations.Proxy;
-
@Inheritance()
@DiscriminatorColumn
-@Proxy(proxyClass = PetProxy.class)
@DiscriminatorValue("PET")
@Entity
-public class Pet implements PetProxy {
+public class Pet {
private Integer id;
@@ -36,7 +33,6 @@ public void setName(String name) {
this.name = name;
}
- @Override
public String makeNoise() {
return "Generic pet noises";
}
diff --git a/integration-tests/jpa/src/main/java/io/quarkus/it/jpa/proxy/PetOwner.java b/integration-tests/jpa/src/main/java/io/quarkus/it/jpa/proxy/PetOwner.java
index 8c430db0c82bb..bd99c0fe9b160 100644
--- a/integration-tests/jpa/src/main/java/io/quarkus/it/jpa/proxy/PetOwner.java
+++ b/integration-tests/jpa/src/main/java/io/quarkus/it/jpa/proxy/PetOwner.java
@@ -14,7 +14,7 @@ public class PetOwner {
String name;
- PetProxy pet;
+ Pet pet;
public String getName() {
return name;
@@ -33,13 +33,13 @@ public void setId(Integer id) {
this.id = id;
}
- @OneToOne(optional = false, cascade = CascadeType.ALL, fetch = FetchType.LAZY, targetEntity = Pet.class)
+ @OneToOne(optional = false, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(nullable = false)
- public PetProxy getPet() {
+ public Pet getPet() {
return pet;
}
- public void setPet(PetProxy pet) {
+ public void setPet(Pet pet) {
this.pet = pet;
}
}
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..270876ea0f717 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
@@ -12,6 +12,8 @@
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
+import org.hibernate.Hibernate;
+
import io.quarkus.narayana.jta.QuarkusTransaction;
import io.quarkus.narayana.jta.runtime.TransactionConfiguration;
import io.quarkus.runtime.StartupEvent;
@@ -79,10 +81,13 @@ public String testBasic() {
}
/**
- * tests for the @Proxy annotation in an inheritance hierarchy
+ * tests for the proxies in an inheritance hierarchy
*
* We need to do our own proxy generation at build time, so this tests that the logic matches what hibernate expects
*/
+ // TODO: this previously was about the @Proxy annotation, removed in Hibernate ORM 7.0.
+ // We should check whether the test still makes sense...
+ // See also https://hibernate.zulipchat.com/#narrow/stream/132094-hibernate-orm-dev/topic/HHH-18194/near/467597335
@GET
@Path("inheritance")
@Transactional
@@ -90,29 +95,18 @@ 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
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);
-
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);
- expectTrue(owner.getPet() instanceof DogProxy);
+ var unproxied = Hibernate.unproxy(owner.getPet());
+ expectTrue(unproxied instanceof Dog);
+ expectEquals("Woof", ((Dog) unproxied).bark());
+ expectEquals("Rubber Bone", ((Dog) unproxied).getFavoriteToy());
return "OK";
}
diff --git a/pom.xml b/pom.xml
index a32db0d85e60f..d99c0d16b003e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -71,13 +71,13 @@
0.8.12
6.13.4
5.5.0
- 6.6.1.Final
+ 7.0.0.Beta1
4.13.0
1.14.18
- 7.0.1.Final
2.4.2.Final
8.0.1.Final
- 7.2.1.Final
+ 7.2.1.Final
+ 7.0.1.Final
1.65.1