diff --git a/bom/application/pom.xml b/bom/application/pom.xml index 49e76c95bd93f..d8fe2f51979f8 100644 --- a/bom/application/pom.xml +++ b/bom/application/pom.xml @@ -101,10 +101,10 @@ bytebuddy.version (just below), hibernate-orm.version-for-documentation (in docs/pom.xml) and both hibernate-orm.version and antlr.version in build-parent/pom.xml WARNING again for diffs that don't provide enough context: when updating, see above --> - 6.4.4.Final - 1.14.11 + 6.5.0.Final + 1.14.12 6.0.6.Final - 2.2.2.Final + 2.3.0.Final 8.0.1.Final 7.1.0.Final diff --git a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmTypes.java b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmTypes.java index e9f713c98007a..b60058816d1ec 100644 --- a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmTypes.java +++ b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmTypes.java @@ -231,6 +231,7 @@ private HibernateOrmTypes() { DotName.createSimple("org.hibernate.annotations.Filters"), DotName.createSimple("org.hibernate.annotations.ForeignKey"), DotName.createSimple("org.hibernate.annotations.Formula"), + DotName.createSimple("org.hibernate.annotations.FractionalSeconds"), DotName.createSimple("org.hibernate.annotations.Generated"), DotName.createSimple("org.hibernate.annotations.GeneratedColumn"), DotName.createSimple("org.hibernate.annotations.GeneratorType"), @@ -287,6 +288,7 @@ private HibernateOrmTypes() { DotName.createSimple("org.hibernate.annotations.Persister"), DotName.createSimple("org.hibernate.annotations.Polymorphism"), DotName.createSimple("org.hibernate.annotations.Proxy"), + DotName.createSimple("org.hibernate.annotations.QueryCacheLayout"), DotName.createSimple("org.hibernate.annotations.RowId"), DotName.createSimple("org.hibernate.annotations.SQLDelete"), DotName.createSimple("org.hibernate.annotations.SQLDeleteAll"), 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 18fd28d86a15d..4becc05929aa9 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 @@ -223,7 +223,7 @@ private RuntimeSettings buildRuntimeSettings(String persistenceUnitName, Recorde } // Allow detection of driver/database capabilities on runtime init (was disabled during static init) - runtimeSettingsBuilder.put("hibernate.temp.use_jdbc_metadata_defaults", "true"); + runtimeSettingsBuilder.put("hibernate.boot.allow_jdbc_metadata_access", "true"); if (!persistenceUnitConfig.unsupportedProperties().isEmpty()) { log.warnf("Persistence-unit [%s] sets unsupported properties." 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 fa815d3fe5d43..7315f7449a403 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 @@ -8,6 +8,7 @@ import jakarta.persistence.criteria.CriteriaQuery; import jakarta.persistence.criteria.CriteriaUpdate; +import org.hibernate.Filter; import org.hibernate.HibernateException; import org.hibernate.LockMode; import org.hibernate.SessionFactory; @@ -23,6 +24,7 @@ import org.hibernate.query.Query; import org.hibernate.query.SelectionQuery; import org.hibernate.query.criteria.HibernateCriteriaBuilder; +import org.hibernate.query.criteria.JpaCriteriaInsert; import org.hibernate.query.criteria.JpaCriteriaInsertSelect; /** @@ -91,6 +93,26 @@ public T get(Class entityClass, Object id, LockMode lockMode) { return delegate.get().get(entityClass, id, lockMode); } + @Override + public Filter enableFilter(String filterName) { + return delegate.get().enableFilter(filterName); + } + + @Override + public Filter getEnabledFilter(String filterName) { + return delegate.get().getEnabledFilter(filterName); + } + + @Override + 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); 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 33f24af8d789b..9fafd88d5a20c 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 @@ -274,7 +274,7 @@ private MergedSettings mergeSettings(QuarkusPersistenceUnitDefinition puDefiniti // Quarkus specific - cfg.put("hibernate.temp.use_jdbc_metadata_defaults", "false"); + cfg.put("hibernate.boot.allow_jdbc_metadata_access", "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. 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 9541b03d0bb8c..5d616754d4a22 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 @@ -48,6 +48,7 @@ import org.hibernate.query.Query; 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; @@ -1317,6 +1318,14 @@ public MutationQuery createMutationQuery(JpaCriteriaInsertSelect insertSelect) { } } + @Override + public MutationQuery createMutationQuery(JpaCriteriaInsert insertSelect) { + checkBlocking(); + try (SessionResult emr = acquireSession()) { + return emr.session.createMutationQuery(insertSelect); + } + } + @Override public MutationQuery createNativeMutationQuery(String sqlString) { checkBlocking(); 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 c20c509377e64..5d52415fdb78a 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 @@ -13,6 +13,7 @@ import jakarta.transaction.TransactionManager; import jakarta.transaction.TransactionSynchronizationRegistry; +import org.hibernate.Filter; import org.hibernate.HibernateException; import org.hibernate.LockMode; import org.hibernate.SessionFactory; @@ -28,6 +29,7 @@ import org.hibernate.query.Query; 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; @@ -394,6 +396,30 @@ public Object get(String entityName, Object id, LockMode lockMode) { } } + @Override + public Filter enableFilter(String filterName) { + checkBlocking(); + try (SessionResult emr = acquireSession()) { + return emr.statelessSession.enableFilter(filterName); + } + } + + @Override + public Filter getEnabledFilter(String filterName) { + checkBlocking(); + try (SessionResult emr = acquireSession()) { + return emr.statelessSession.getEnabledFilter(filterName); + } + } + + @Override + public void disableFilter(String filterName) { + checkBlocking(); + try (SessionResult emr = acquireSession()) { + emr.statelessSession.disableFilter(filterName); + } + } + @Override public String getTenantIdentifier() { try (SessionResult emr = acquireSession()) { @@ -576,6 +602,14 @@ public MutationQuery createMutationQuery(JpaCriteriaInsertSelect insertSelect) { } } + @Override + public MutationQuery createMutationQuery(JpaCriteriaInsert insertSelect) { + checkBlocking(); + try (SessionResult emr = acquireSession()) { + return emr.statelessSession.createMutationQuery(insertSelect); + } + } + @Override public MutationQuery createNativeMutationQuery(String sqlString) { checkBlocking(); diff --git a/integration-tests/hibernate-orm-panache-kotlin/src/main/kotlin/io/quarkus/it/panache/kotlin/Status.kt b/integration-tests/hibernate-orm-panache-kotlin/src/main/kotlin/io/quarkus/it/panache/kotlin/Status.kt index 1c21f2a2204d3..d9a471e250749 100644 --- a/integration-tests/hibernate-orm-panache-kotlin/src/main/kotlin/io/quarkus/it/panache/kotlin/Status.kt +++ b/integration-tests/hibernate-orm-panache-kotlin/src/main/kotlin/io/quarkus/it/panache/kotlin/Status.kt @@ -1,6 +1,8 @@ package io.quarkus.it.panache.kotlin enum class Status { + // Make sure to keep the ordinal order different from alphabetical order here + // See io.quarkus.it.panache.TestEndpointRunner LIVING, DECEASED } diff --git a/integration-tests/hibernate-orm-panache-kotlin/src/test/kotlin/io/quarkus/it/panache/TestEndpointRunner.kt b/integration-tests/hibernate-orm-panache-kotlin/src/test/kotlin/io/quarkus/it/panache/TestEndpointRunner.kt index d52aeaebc2ff0..f8607b6d984e8 100644 --- a/integration-tests/hibernate-orm-panache-kotlin/src/test/kotlin/io/quarkus/it/panache/TestEndpointRunner.kt +++ b/integration-tests/hibernate-orm-panache-kotlin/src/test/kotlin/io/quarkus/it/panache/TestEndpointRunner.kt @@ -40,7 +40,11 @@ class TestEndpointRunner { con.close() Assertions.assertEquals( - "CHARACTER VARYING", + // The H2 dialect uses native enums by default for @Enumerated(EnumType.STRING) + // We're also checking enum value order here: + // with @Enumerated(EnumType.STRING), enum values should be in alphabetical order + // (which is different from the ordinal order) + "ENUM('DECEASED', 'LIVING')", schema["PERSON2"]?.get("STATUS"), schema.toString() )