Skip to content

Commit d6f60c9

Browse files
author
Houssam El Mansouri
committed
Add support for Hibernate's hibernate.hbm2ddl.extra_physical_table_types
1 parent c5b886b commit d6f60c9

File tree

4 files changed

+56
-1
lines changed

4 files changed

+56
-1
lines changed

extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/config/properties/ConfigPropertiesTest.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import org.hibernate.FlushMode;
99
import org.hibernate.Session;
10+
import org.hibernate.cfg.AvailableSettings;
1011
import org.jboss.shrinkwrap.api.ShrinkWrap;
1112
import org.jboss.shrinkwrap.api.spec.JavaArchive;
1213
import org.junit.jupiter.api.Test;
@@ -32,7 +33,17 @@ public class ConfigPropertiesTest {
3233
.overrideConfigKey("quarkus.hibernate-orm.\"overrides\".packages", MyEntityForOverridesPU.class.getPackageName())
3334
.overrideConfigKey("quarkus.hibernate-orm.\"overrides\".datasource", "<default>")
3435
// Overrides to test that Quarkus configuration properties are taken into account
35-
.overrideConfigKey("quarkus.hibernate-orm.\"overrides\".flush.mode", "always");
36+
.overrideConfigKey("quarkus.hibernate-orm.\"overrides\".flush.mode", "always")
37+
.overrideConfigKey("quarkus.hibernate-orm.schema-management.extra-physical-table-types",
38+
"MATERIALIZED VIEW,FOREIGN TABLE")
39+
.overrideConfigKey("quarkus.hibernate-orm.\"*\".schema-management.extra-physical-table-types",
40+
"MATERIALIZED VIEW,FOREIGN TABLE")
41+
.overrideConfigKey("quarkus.hibernate-orm.\"overrides\".schema-management.extra-physical-table-types",
42+
"MATERIALIZED VIEW,FOREIGN TABLE")
43+
// Disable metrics to avoid requiring metrics deployment artifacts on test classpath
44+
.overrideConfigKey("quarkus.smallrye-metrics.enabled", "false")
45+
.overrideConfigKey("quarkus.agroal.metrics.enabled", "false")
46+
.overrideConfigKey("quarkus.agroal.enabled", "false");
3647

3748
@Inject
3849
Session sessionForDefaultPU;
@@ -48,4 +59,20 @@ public void propertiesAffectingSession() {
4859
assertThat(sessionForOverridesPU.getHibernateFlushMode()).isEqualTo(FlushMode.ALWAYS);
4960
}
5061

62+
@Test
63+
@Transactional
64+
public void extraPhysicalTableTypes() {
65+
// Access the configuration through the SessionFactory properties
66+
Object extraPhysicalTableTypes = sessionForOverridesPU.getSessionFactory()
67+
.getProperties()
68+
.get(AvailableSettings.EXTRA_PHYSICAL_TABLE_TYPES);
69+
70+
assertThat(extraPhysicalTableTypes).isNotNull();
71+
assertThat(extraPhysicalTableTypes).isInstanceOf(String.class);
72+
73+
String tableTypesStr = (String) extraPhysicalTableTypes;
74+
String[] tableTypes = tableTypesStr.split(",");
75+
assertThat(tableTypes).containsExactly("MATERIALIZED VIEW", "FOREIGN TABLE");
76+
}
77+
5178
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,13 @@ private static void injectRuntimeConfiguration(HibernateOrmRuntimeConfigPersiste
483483
"When using offline mode with `quarkus.hibernate-orm.database.start-offline=true`, the schema management strategy `quarkus.hibernate-orm.schema-management.strategy` must be unset or set to `none`");
484484
}
485485

486+
// Pass extraPhysicalTableTypes configuration
487+
Optional<String> extraPhysicalTableTypes = persistenceUnitConfig.schemaManagement().extraPhysicalTableTypes();
488+
if (extraPhysicalTableTypes.isPresent()) {
489+
String extraTableTypesStr = extraPhysicalTableTypes.get();
490+
runtimeSettingsBuilder.put(AvailableSettings.EXTRA_PHYSICAL_TABLE_TYPES, extraTableTypesStr);
491+
}
492+
486493
runtimeSettingsBuilder.put(AvailableSettings.JAKARTA_HBM2DDL_DATABASE_ACTION,
487494
persistenceUnitConfig.database().generation().generation()
488495
.orElse(generationStrategy));

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,20 @@ interface HibernateOrmConfigPersistenceUnitSchemaManagement {
172172
*/
173173
@WithDefault("false")
174174
boolean haltOnError();
175+
176+
/**
177+
* Additional database object types to include in schema management operations.
178+
*
179+
* By default, Hibernate ORM only considers tables and sequences when performing
180+
* schema management operations.
181+
* This setting allows you to specify additional database object types that should be included,
182+
* such as "MATERIALIZED VIEW", "VIEW", or other database-specific object types.
183+
*
184+
* The exact supported values depend on the underlying database and dialect.
185+
*
186+
* @asciidoclet
187+
*/
188+
Optional<@WithConverter(TrimmedStringConverter.class) String> extraPhysicalTableTypes();
175189
}
176190

177191
@ConfigGroup

extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/FastBootHibernateReactivePersistenceProvider.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,13 @@ private static void injectRuntimeConfiguration(HibernateOrmRuntimeConfigPersiste
392392
"When using offline mode with `quarkus.hibernate-orm.database.start-offline=true`, the schema management strategy `quarkus.hibernate-orm.schema-management.strategy` must be unset or set to `none`");
393393
}
394394

395+
// Pass extraPhysicalTableTypes configuration
396+
Optional<String> extraPhysicalTableTypes = persistenceUnitConfig.schemaManagement().extraPhysicalTableTypes();
397+
if (extraPhysicalTableTypes.isPresent()) {
398+
String extraTableTypesStr = extraPhysicalTableTypes.get();
399+
runtimeSettingsBuilder.put(AvailableSettings.EXTRA_PHYSICAL_TABLE_TYPES, extraTableTypesStr);
400+
}
401+
395402
// Database
396403
runtimeSettingsBuilder.put(AvailableSettings.JAKARTA_HBM2DDL_DATABASE_ACTION,
397404
persistenceUnitConfig.database().generation().generation()

0 commit comments

Comments
 (0)