Skip to content

Commit 8029cac

Browse files
committed
Upgrade to Hibernate ORM 7.0.0.Alpha3
1 parent 74d7d69 commit 8029cac

File tree

16 files changed

+155
-101
lines changed

16 files changed

+155
-101
lines changed

bom/application/pom.xml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5391,10 +5391,11 @@
53915391
<version>${hibernate-orm.version}</version>
53925392
<exclusions>
53935393
<!-- We don't want Jandex at runtime -->
5394-
<exclusion>
5394+
<!-- ... but right now we need it: https://github.com/hibernate/hibernate-models/issues/85 -->
5395+
<!-- <exclusion>
53955396
<groupId>io.smallrye</groupId>
53965397
<artifactId>jandex</artifactId>
5397-
</exclusion>
5398+
</exclusion> -->
53985399
</exclusions>
53995400
</dependency>
54005401
<dependency>
@@ -5420,6 +5421,11 @@
54205421
<artifactId>hibernate-jpamodelgen</artifactId>
54215422
<version>${hibernate-orm.version}</version>
54225423
</dependency>
5424+
<dependency>
5425+
<groupId>org.hibernate.models</groupId>
5426+
<artifactId>hibernate-models</artifactId>
5427+
<version>${hibernate-models.version}</version>
5428+
</dependency>
54235429
<dependency>
54245430
<groupId>org.hibernate.common</groupId>
54255431
<artifactId>hibernate-commons-annotations</artifactId>

extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/ClassNames.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ private static DotName createConstant(String fqcn) {
6161
public static final DotName XML_FORMAT = createConstant("io.quarkus.hibernate.orm.XmlFormat");
6262

6363
public static final List<DotName> GENERATORS = List.of(
64+
createConstant("org.hibernate.generator.Assigned"),
6465
createConstant("org.hibernate.generator.internal.CurrentTimestampGeneration"),
6566
createConstant("org.hibernate.generator.internal.GeneratedAlwaysGeneration"),
6667
createConstant("org.hibernate.generator.internal.GeneratedGeneration"),
@@ -79,8 +80,6 @@ private static DotName createConstant(String fqcn) {
7980
createConstant("org.hibernate.id.enhanced.SequenceStyleGenerator"),
8081
createConstant("org.hibernate.id.enhanced.TableGenerator"),
8182
createConstant("org.hibernate.id.uuid.UuidGenerator"),
82-
createConstant("org.hibernate.tuple.CreationTimestampGeneration"),
83-
createConstant("org.hibernate.tuple.UpdateTimestampGeneration"),
8483
createConstant("org.hibernate.tuple.VmValueGeneration"));
8584

8685
public static final List<DotName> PACKAGE_ANNOTATIONS = List.of(
@@ -110,7 +109,11 @@ private static DotName createConstant(String fqcn) {
110109
createConstant("org.hibernate.annotations.NamedNativeQuery"),
111110
createConstant("org.hibernate.annotations.NamedQueries"),
112111
createConstant("org.hibernate.annotations.NamedQuery"),
112+
createConstant("jakarta.persistence.SequenceGenerator"),
113+
createConstant("jakarta.persistence.SequenceGenerators"),
113114
createConstant("org.hibernate.annotations.SoftDelete"),
115+
createConstant("jakarta.persistence.TableGenerator"),
116+
createConstant("jakarta.persistence.TableGenerators"),
114117
createConstant("org.hibernate.annotations.TypeRegistration"),
115118
createConstant("org.hibernate.annotations.TypeRegistrations"));
116119

@@ -122,6 +125,7 @@ private static DotName createConstant(String fqcn) {
122125
createConstant("jakarta.persistence.AttributeOverrides"),
123126
createConstant("jakarta.persistence.Basic"),
124127
createConstant("jakarta.persistence.Cacheable"),
128+
createConstant("jakarta.persistence.CheckConstraint"),
125129
createConstant("jakarta.persistence.CollectionTable"),
126130
createConstant("jakarta.persistence.Column"),
127131
createConstant("jakarta.persistence.ColumnResult"),
@@ -135,6 +139,7 @@ private static DotName createConstant(String fqcn) {
135139
createConstant("jakarta.persistence.Embeddable"),
136140
createConstant("jakarta.persistence.Embedded"),
137141
createConstant("jakarta.persistence.EmbeddedId"),
142+
createConstant("jakarta.persistence.EnumeratedValue"),
138143
createConstant("jakarta.persistence.Entity"),
139144
createConstant("jakarta.persistence.EntityListeners"),
140145
createConstant("jakarta.persistence.EntityResult"),
@@ -247,6 +252,7 @@ private static DotName createConstant(String fqcn) {
247252
createConstant("org.hibernate.annotations.ConcreteProxy"),
248253
createConstant("org.hibernate.annotations.ConverterRegistration"),
249254
createConstant("org.hibernate.annotations.ConverterRegistrations"),
255+
createConstant("org.hibernate.boot.models.Copied"),
250256
createConstant("org.hibernate.annotations.CreationTimestamp"),
251257
createConstant("org.hibernate.annotations.CurrentTimestamp"),
252258
createConstant("org.hibernate.annotations.DialectOverride$Check"),
@@ -360,8 +366,8 @@ private static DotName createConstant(String fqcn) {
360366
createConstant("org.hibernate.annotations.Parameter"),
361367
createConstant("org.hibernate.annotations.Parent"),
362368
createConstant("org.hibernate.annotations.PartitionKey"),
363-
createConstant("org.hibernate.annotations.Persister"),
364369
createConstant("org.hibernate.annotations.Polymorphism"),
370+
createConstant("org.hibernate.annotations.PropertyRef"),
365371
createConstant("org.hibernate.annotations.Proxy"),
366372
createConstant("org.hibernate.annotations.QueryCacheLayout"),
367373
createConstant("org.hibernate.annotations.RowId"),

extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmProcessor.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
import org.hibernate.internal.util.collections.ArrayHelper;
5151
import org.hibernate.jpa.boot.spi.JpaSettings;
5252
import org.hibernate.jpa.boot.spi.PersistenceUnitDescriptor;
53-
import org.hibernate.loader.BatchFetchStyle;
53+
import org.hibernate.jpa.boot.spi.PersistenceXmlParser;
5454
import org.jboss.jandex.AnnotationInstance;
5555
import org.jboss.jandex.AnnotationTarget.Kind;
5656
import org.jboss.jandex.AnnotationValue;
@@ -135,6 +135,7 @@
135135
import io.quarkus.hibernate.orm.runtime.proxies.PreGeneratedProxies;
136136
import io.quarkus.hibernate.orm.runtime.recording.RecordedConfig;
137137
import io.quarkus.hibernate.orm.runtime.schema.SchemaManagementIntegrator;
138+
import io.quarkus.hibernate.orm.runtime.service.FlatClassLoaderService;
138139
import io.quarkus.hibernate.orm.runtime.tenant.DataSourceTenantConnectionResolver;
139140
import io.quarkus.hibernate.orm.runtime.tenant.TenantConnectionResolver;
140141
import io.quarkus.panache.hibernate.common.deployment.HibernateEnhancersRegisteredBuildItem;
@@ -275,8 +276,12 @@ List<HotDeploymentWatchedFileBuildItem> hotDeploymentWatchedFiles(HibernateOrmCo
275276
public void parsePersistenceXmlDescriptors(HibernateOrmConfig config,
276277
BuildProducer<PersistenceXmlDescriptorBuildItem> persistenceXmlDescriptorBuildItemBuildProducer) {
277278
if (!shouldIgnorePersistenceXmlResources(config)) {
278-
var explicitDescriptors = QuarkusPersistenceXmlParser.locatePersistenceUnits();
279-
for (var desc : explicitDescriptors) {
279+
var parser = PersistenceXmlParser.create(Map.of(), null, FlatClassLoaderService.INSTANCE);
280+
var urls = parser.getClassLoaderService().locateResources("META-INF/persistence.xml");
281+
if (urls.isEmpty()) {
282+
return;
283+
}
284+
for (var desc : parser.parse(urls).values()) {
280285
persistenceXmlDescriptorBuildItemBuildProducer.produce(new PersistenceXmlDescriptorBuildItem(desc));
281286
}
282287
}
@@ -1012,7 +1017,6 @@ private static void producePersistenceUnitDescriptorFromConfig(
10121017
if (batchSize > 0) {
10131018
descriptor.getProperties().setProperty(AvailableSettings.DEFAULT_BATCH_FETCH_SIZE,
10141019
Integer.toString(batchSize));
1015-
descriptor.getProperties().setProperty(AvailableSettings.BATCH_FETCH_STYLE, BatchFetchStyle.PADDED.toString());
10161020
}
10171021

10181022
if (persistenceUnitConfig.fetch().maxDepth().isPresent()) {

extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/JpaJandexScavenger.java

Lines changed: 20 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,11 @@
1919
import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmJoinedSubclassEntityType;
2020
import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmRootEntityType;
2121
import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmUnionSubclassEntityType;
22-
import org.hibernate.boot.jaxb.mapping.EntityOrMappedSuperclass;
23-
import org.hibernate.boot.jaxb.mapping.JaxbConverter;
24-
import org.hibernate.boot.jaxb.mapping.JaxbEmbeddable;
25-
import org.hibernate.boot.jaxb.mapping.JaxbEntity;
26-
import org.hibernate.boot.jaxb.mapping.JaxbEntityListener;
27-
import org.hibernate.boot.jaxb.mapping.JaxbEntityListeners;
28-
import org.hibernate.boot.jaxb.mapping.JaxbEntityMappings;
29-
import org.hibernate.boot.jaxb.mapping.JaxbMappedSuperclass;
30-
import org.hibernate.boot.jaxb.mapping.JaxbPersistenceUnitDefaults;
31-
import org.hibernate.boot.jaxb.mapping.JaxbPersistenceUnitMetadata;
32-
import org.hibernate.boot.jaxb.mapping.ManagedType;
22+
import org.hibernate.boot.jaxb.mapping.spi.JaxbEntity;
23+
import org.hibernate.boot.jaxb.mapping.spi.JaxbEntityListenerContainerImpl;
24+
import org.hibernate.boot.jaxb.mapping.spi.JaxbEntityMappingsImpl;
25+
import org.hibernate.boot.jaxb.mapping.spi.JaxbEntityOrMappedSuperclass;
26+
import org.hibernate.boot.jaxb.mapping.spi.JaxbManagedType;
3327
import org.jboss.jandex.AnnotationInstance;
3428
import org.jboss.jandex.AnnotationTarget;
3529
import org.jboss.jandex.ClassInfo;
@@ -190,32 +184,33 @@ private void enlistExplicitMappings(Collector collector,
190184
}
191185
}
192186

193-
private void enlistOrmXmlMapping(Collector collector, JaxbEntityMappings mapping) {
187+
private void enlistOrmXmlMapping(Collector collector, JaxbEntityMappingsImpl mapping) {
194188
String packageName = mapping.getPackage();
195189
String packagePrefix = packageName == null ? "" : packageName + ".";
196190

197-
JaxbPersistenceUnitMetadata metadata = mapping.getPersistenceUnitMetadata();
198-
JaxbPersistenceUnitDefaults defaults = metadata == null ? null : metadata.getPersistenceUnitDefaults();
191+
var metadata = mapping.getPersistenceUnitMetadata();
192+
var defaults = metadata == null ? null : metadata.getPersistenceUnitDefaults();
199193
if (defaults != null) {
200-
enlistOrmXmlMappingListeners(collector, packagePrefix, defaults.getEntityListeners());
194+
enlistOrmXmlMappingListeners(collector, packagePrefix, defaults.getEntityListenerContainer());
201195
}
202196

203-
for (JaxbEntity entity : mapping.getEntities()) {
197+
for (var entity : mapping.getEntities()) {
204198
enlistOrmXmlMappingManagedClass(collector, packagePrefix, entity, "entity");
205199
}
206-
for (JaxbMappedSuperclass mappedSuperclass : mapping.getMappedSuperclasses()) {
200+
for (var mappedSuperclass : mapping.getMappedSuperclasses()) {
207201
enlistOrmXmlMappingManagedClass(collector, packagePrefix, mappedSuperclass, "mapped-superclass");
208202
}
209-
for (JaxbEmbeddable embeddable : mapping.getEmbeddables()) {
203+
for (var embeddable : mapping.getEmbeddables()) {
210204
String name = safeGetClassName(packagePrefix, embeddable, "embeddable");
211205
enlistExplicitClass(collector, name);
212206
}
213-
for (JaxbConverter converter : mapping.getConverters()) {
207+
for (var converter : mapping.getConverters()) {
214208
collector.potentialCdiBeanTypes.add(DotName.createSimple(qualifyIfNecessary(packagePrefix, converter.getClazz())));
215209
}
216210
}
217211

218-
private void enlistOrmXmlMappingManagedClass(Collector collector, String packagePrefix, EntityOrMappedSuperclass managed,
212+
private void enlistOrmXmlMappingManagedClass(Collector collector, String packagePrefix,
213+
JaxbEntityOrMappedSuperclass managed,
219214
String nodeName) {
220215
String name = safeGetClassName(packagePrefix, managed, nodeName);
221216
enlistExplicitClass(collector, name);
@@ -225,19 +220,20 @@ private void enlistOrmXmlMappingManagedClass(Collector collector, String package
225220
collector.entityTypes.add(name);
226221
}
227222

228-
enlistOrmXmlMappingListeners(collector, packagePrefix, managed.getEntityListeners());
223+
enlistOrmXmlMappingListeners(collector, packagePrefix, managed.getEntityListenerContainer());
229224
}
230225

231-
private void enlistOrmXmlMappingListeners(Collector collector, String packagePrefix, JaxbEntityListeners entityListeners) {
226+
private void enlistOrmXmlMappingListeners(Collector collector, String packagePrefix,
227+
JaxbEntityListenerContainerImpl entityListeners) {
232228
if (entityListeners == null) {
233229
return;
234230
}
235-
for (JaxbEntityListener listener : entityListeners.getEntityListener()) {
231+
for (var listener : entityListeners.getEntityListeners()) {
236232
collector.potentialCdiBeanTypes.add(DotName.createSimple(qualifyIfNecessary(packagePrefix, listener.getClazz())));
237233
}
238234
}
239235

240-
private static String safeGetClassName(String packagePrefix, ManagedType managedType, String nodeName) {
236+
private static String safeGetClassName(String packagePrefix, JaxbManagedType managedType, String nodeName) {
241237
String name = managedType.getClazz();
242238
if (name == null) {
243239
throw new IllegalArgumentException("Missing attribute '" + nodeName + ".class'");

extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/QuarkusPersistenceXmlParser.java

Lines changed: 0 additions & 46 deletions
This file was deleted.

extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/xml/QuarkusMappingFileParser.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import org.hibernate.boot.archive.internal.ArchiveHelper;
1111
import org.hibernate.boot.jaxb.spi.Binding;
12+
import org.hibernate.boot.jaxb.spi.JaxbBindableMappingDescriptor;
1213
import org.hibernate.boot.registry.BootstrapServiceRegistry;
1314
import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder;
1415
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
@@ -62,7 +63,7 @@ public Optional<RecordableXmlMapping> parse(String persistenceUnitName, URL pers
6263
}
6364

6465
try (InputStream stream = url.openStream()) {
65-
Binding<?> binding = (Binding<?>) binderAccess.bind(stream);
66+
Binding<? extends JaxbBindableMappingDescriptor> binding = binderAccess.bind(stream);
6667
return Optional.of(RecordableXmlMapping.create(binding));
6768
} catch (RuntimeException | IOException e) {
6869
throw new IllegalStateException(

extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/enhancer/HibernateEntityEnhancerPresentEmbeddableTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,6 @@ public void setId(EmbeddableIdWithAnnotation id) {
360360
}
361361
}
362362

363-
@MappedSuperclass
364363
public interface Identifiable {
365364
Object getId();
366365
}

extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/FastBootHibernatePersistenceProvider.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import javax.sql.DataSource;
1111

1212
import jakarta.persistence.EntityManagerFactory;
13+
import jakarta.persistence.PersistenceConfiguration;
1314
import jakarta.persistence.PersistenceException;
1415
import jakarta.persistence.spi.PersistenceProvider;
1516
import jakarta.persistence.spi.PersistenceUnitInfo;
@@ -81,6 +82,14 @@ public EntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitI
8182
return getEntityManagerFactoryBuilder(info, properties).build();
8283
}
8384

85+
@Override
86+
public EntityManagerFactory createEntityManagerFactory(PersistenceConfiguration configuration) {
87+
throw new PersistenceException(
88+
"This PersistenceProvider does not support createEntityManagerFactory(PersistenceConfiguration). "
89+
+ " Quarkus is responsible for creating the entity manager factory, so inject your entity manager"
90+
+ " factory through CDI instead: `@Inject EntityManagerFactory emf`.");
91+
}
92+
8493
@SuppressWarnings("rawtypes")
8594
@Override
8695
public void generateSchema(PersistenceUnitInfo info, Map map) {

extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/StatelessSessionLazyDelegator.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.util.function.Supplier;
55

66
import jakarta.persistence.EntityGraph;
7+
import jakarta.persistence.TypedQueryReference;
78
import jakarta.persistence.criteria.CriteriaDelete;
89
import jakarta.persistence.criteria.CriteriaQuery;
910
import jakarta.persistence.criteria.CriteriaUpdate;
@@ -276,6 +277,11 @@ public Query createQuery(CriteriaDelete deleteQuery) {
276277
return delegate.get().createQuery(deleteQuery);
277278
}
278279

280+
@Override
281+
public <R> Query<R> createQuery(TypedQueryReference<R> typedQueryReference) {
282+
return delegate.get().createQuery(typedQueryReference);
283+
}
284+
279285
@Override
280286
@Deprecated(since = "6.0")
281287
public NativeQuery createNativeQuery(String sqlString) {

extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/boot/xml/RecordableXmlMapping.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33
import org.hibernate.boot.jaxb.Origin;
44
import org.hibernate.boot.jaxb.SourceType;
55
import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmHibernateMapping;
6-
import org.hibernate.boot.jaxb.mapping.JaxbEntityMappings;
6+
import org.hibernate.boot.jaxb.mapping.spi.JaxbEntityMappingsImpl;
77
import org.hibernate.boot.jaxb.spi.Binding;
8+
import org.hibernate.boot.jaxb.spi.JaxbBindableMappingDescriptor;
89

910
import io.quarkus.runtime.annotations.RecordableConstructor;
1011

@@ -16,17 +17,17 @@
1617
*/
1718
public class RecordableXmlMapping {
1819
// The following two properties are mutually exclusive: exactly one of them is non-null.
19-
private final JaxbEntityMappings ormXmlRoot;
20+
private final JaxbEntityMappingsImpl ormXmlRoot;
2021
private final JaxbHbmHibernateMapping hbmXmlRoot;
2122

2223
private final SourceType originType;
2324
private final String originName;
2425

25-
public static RecordableXmlMapping create(Binding<?> binding) {
26-
Object root = binding.getRoot();
26+
public static RecordableXmlMapping create(Binding<? extends JaxbBindableMappingDescriptor> binding) {
27+
JaxbBindableMappingDescriptor root = binding.getRoot();
2728
Origin origin = binding.getOrigin();
28-
if (root instanceof JaxbEntityMappings) {
29-
return new RecordableXmlMapping((JaxbEntityMappings) root, null, origin.getType(), origin.getName());
29+
if (root instanceof JaxbEntityMappingsImpl) {
30+
return new RecordableXmlMapping((JaxbEntityMappingsImpl) root, null, origin.getType(), origin.getName());
3031
} else if (root instanceof JaxbHbmHibernateMapping) {
3132
return new RecordableXmlMapping(null, (JaxbHbmHibernateMapping) root, origin.getType(), origin.getName());
3233
} else {
@@ -35,7 +36,7 @@ public static RecordableXmlMapping create(Binding<?> binding) {
3536
}
3637

3738
@RecordableConstructor
38-
public RecordableXmlMapping(JaxbEntityMappings ormXmlRoot, JaxbHbmHibernateMapping hbmXmlRoot, SourceType originType,
39+
public RecordableXmlMapping(JaxbEntityMappingsImpl ormXmlRoot, JaxbHbmHibernateMapping hbmXmlRoot, SourceType originType,
3940
String originName) {
4041
this.ormXmlRoot = ormXmlRoot;
4142
this.hbmXmlRoot = hbmXmlRoot;
@@ -50,7 +51,7 @@ public String toString() {
5051
'}';
5152
}
5253

53-
public JaxbEntityMappings getOrmXmlRoot() {
54+
public JaxbEntityMappingsImpl getOrmXmlRoot() {
5455
return ormXmlRoot;
5556
}
5657

0 commit comments

Comments
 (0)