Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

import org.hibernate.FlushMode;
import org.hibernate.Session;
import org.hibernate.cfg.AvailableSettings;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.jupiter.api.Test;
Expand All @@ -32,7 +33,9 @@ public class ConfigPropertiesTest {
.overrideConfigKey("quarkus.hibernate-orm.\"overrides\".packages", MyEntityForOverridesPU.class.getPackageName())
.overrideConfigKey("quarkus.hibernate-orm.\"overrides\".datasource", "<default>")
// Overrides to test that Quarkus configuration properties are taken into account
.overrideConfigKey("quarkus.hibernate-orm.\"overrides\".flush.mode", "always");
.overrideConfigKey("quarkus.hibernate-orm.\"overrides\".flush.mode", "always")
.overrideConfigKey("quarkus.hibernate-orm.\"overrides\".schema-management.extra-physical-table-types",
"MATERIALIZED VIEW,FOREIGN TABLE");

@Inject
Session sessionForDefaultPU;
Expand All @@ -48,4 +51,20 @@ public void propertiesAffectingSession() {
assertThat(sessionForOverridesPU.getHibernateFlushMode()).isEqualTo(FlushMode.ALWAYS);
}

@Test
@Transactional
public void extraPhysicalTableTypes() {
// Access the configuration through the SessionFactory properties
Object extraPhysicalTableTypes = sessionForOverridesPU.getSessionFactory()
.getProperties()
.get(AvailableSettings.EXTRA_PHYSICAL_TABLE_TYPES);

assertThat(extraPhysicalTableTypes).isNotNull();
assertThat(extraPhysicalTableTypes).isInstanceOf(String.class);

String tableTypesStr = (String) extraPhysicalTableTypes;
String[] tableTypes = tableTypesStr.split(",");
assertThat(tableTypes).containsExactly("MATERIALIZED VIEW", "FOREIGN TABLE");
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -483,6 +483,13 @@ private static void injectRuntimeConfiguration(HibernateOrmRuntimeConfigPersiste
"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`");
}

// Pass extraPhysicalTableTypes configuration
Optional<String> extraPhysicalTableTypes = persistenceUnitConfig.schemaManagement().extraPhysicalTableTypes();
if (extraPhysicalTableTypes.isPresent()) {
String extraTableTypesStr = extraPhysicalTableTypes.get();
runtimeSettingsBuilder.put(AvailableSettings.EXTRA_PHYSICAL_TABLE_TYPES, extraTableTypesStr);
}

runtimeSettingsBuilder.put(AvailableSettings.JAKARTA_HBM2DDL_DATABASE_ACTION,
persistenceUnitConfig.database().generation().generation()
.orElse(generationStrategy));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,20 @@ interface HibernateOrmConfigPersistenceUnitSchemaManagement {
*/
@WithDefault("false")
boolean haltOnError();

/**
* Additional database object types to include in schema management operations.
*
* By default, Hibernate ORM only considers tables and sequences when performing
* schema management operations.
* This setting allows you to specify additional database object types that should be included,
* such as "MATERIALIZED VIEW", "VIEW", or other database-specific object types.
*
* The exact supported values depend on the underlying database and dialect.
*
* @asciidoclet
*/
Optional<@WithConverter(TrimmedStringConverter.class) String> extraPhysicalTableTypes();
}

@ConfigGroup
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -383,6 +383,13 @@ private static void injectRuntimeConfiguration(HibernateOrmRuntimeConfigPersiste
"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`");
}

// Pass extraPhysicalTableTypes configuration
Optional<String> extraPhysicalTableTypes = persistenceUnitConfig.schemaManagement().extraPhysicalTableTypes();
if (extraPhysicalTableTypes.isPresent()) {
String extraTableTypesStr = extraPhysicalTableTypes.get();
runtimeSettingsBuilder.put(AvailableSettings.EXTRA_PHYSICAL_TABLE_TYPES, extraTableTypesStr);
}

// Database
runtimeSettingsBuilder.put(AvailableSettings.JAKARTA_HBM2DDL_DATABASE_ACTION,
persistenceUnitConfig.database().generation().generation()
Expand Down
Loading