DatabaseDialect.ktorg.hibernate.dialect.PostgreSQLDialect) und HSQLDB (org.hibernate.dialect.HSQLDialect). Dient als einzige Quelle der Wahrheit für die Datenbanktypkonfiguration im gesamten Anwendungs-Bootstrap, der Flyway-Migrationsskriptauflösung und der Hibernate-Session-Factory-Einrichtung.asString: String-Eigenschaft über den primären Konstruktor@JvmStatic von Java aus zugänglich sind@JvmStatic bei fromString() macht sie aus Java-Code als DatabaseDialect.fromString(...) aufrufbar, anstatt als DatabaseDialect.Companion.fromString(...)| Konstante | Hibernate-Dialekt-Klasse | Flyway-Vendor | Verwendungskontext |
|---|---|---|---|
PostgreSQL | org.hibernate.dialect.PostgreSQLDialect | postgresql | Produktionsumgebungen – die empfohlene Produktionsdatenbank |
HSQL | org.hibernate.dialect.HSQLDialect | hsqldb | Entwicklung/Test, eingebettetes Setup – wird vom Setup-Assistenten für Einzelbenutzer/lokale Installationen verwendet |
Sucht einen Dialekt anhand seines Hibernate-Klassennamens. Gibt null zurück, wenn keine Übereinstimmung gefunden wird – Aufrufer müssen den Null-Fall behandeln (typischerweise durch Standardeinstellung auf HSQL für die Entwicklung). Die Methode verwendet eine einfache If-Else-Kette anstelle einer Nachschlagetabelle, was für die geringe Anzahl unterstützter Dialekte angemessen ist.
Ordnet einen JDBC-Treiber-Produktnamen dem Flyway-Vendor-Verzeichnisnamen zu. Dies ist entscheidend für die Flyway-Datenbankmigrations-Skriptfindung. Flyway organisiert Migrationsskripte in vendorspezifischen Verzeichnissen:
flyway/{modul}/migrate/postgresql/V1.1.0__RELEASE-RemoveMGC.sql
flyway/{modul}/migrate/hsqldb/V1.1.0__RELEASE-RemoveMGC.sql
Die Methode prüft, ob der Produktname "hsql" enthält (Groß-/Kleinschreibung nicht beachtet) und gibt entsprechend "hsqldb" oder "postgresql" zurück. Dies ermöglicht es, dieselbe Migrationslogik über Datenbanktypen hinweg zu verwenden – vendorspezifische SQL-Unterschiede (z. B. Spaltentypsyntax, Sequenzbehandlung) sind in den vendorspezifischen Migrationsskripten isoliert.
Die Datei enthält einen Kommentar, der zuvor in Betracht gezogene oder geplante Datenbankunterstützungen auflistet:
// Noch nicht unterstützt: // MYSQL, ORACLE, MS_SQL_SERVER, DB2, INFORMIX, DERBY, UNBEKANNT;
Dies offenbart die Designabsicht, mehrere Datenbanken zu unterstützen – eine häufige Anforderung an Unternehmenssoftware. Die aktuelle Implementierung unterstützt nur PostgreSQL (für die Produktion) und HSQLDB (für eingebettete/Entwicklungsumgebungen), wobei die Architektur für Erweiterungen bereit ist.
Der DatabaseDialect-Enum ist Teil einer geschichteten Datenbankabstraktion:
asString-Eigenschaft stellt die Hibernate-Dialektklasse für hibernate.cfg.xml oder die Spring-Boot-Autokonfiguration bereitgetFlywayVendorName() leitet zu vendorspezifischen SQL-Migrationsskripten weiterDiese Datei ist eine der früheren Kotlin-Dateien im Modul projectforge-common (neben anderen Utility-Klassen). Die Verwendung von Kotlin für diesen Enum bietet:
DatabaseDialect? von fromString() zwingt Aufrufer, den Null-Fall zu behandelngetFlywayVendorName() verwendet einen einfachen Substring-Abgleich (contains("hsql")) anstelle eines exakten Vergleichs. Dies könnte zu falschen Positiven führen, wenn ein Datenbankproduktname zufällig "hsql" als Teilstring enthält. Ein robusterer Ansatz wäre der Abgleich gegen eine exakte Liste bekannter Produktnamen.init/common (Schemaerstellung) und migrate/{vendor} (versionsspezifische Migrationen). Diese Trennung ermöglicht es, dass das Basisschema datenbankunabhängig ist, während vendorspezifische Migrationen Unterschiede in der SQL-Syntax oder den Funktionen behandeln (wie PostgreSQL vs. HSQLDB für die Sequenzbehandlung oder die "RemoveMGC"-Migration, die in den Flyway-Verzeichnissen des Projekts sichtbar ist).868d6abb7 2025 -> 2026 63081666f Quelltextdatei-Header: 2024 -> 2025. b6092df09 Copyright 2023 -> 2024 ab45d51fa Copyright 2001-2022 -> 2001-2023. 5f7ef41b8 Copyright 2021 -> 2022 637063dd7 Nichts (Quelltextdatei-Header korrigiert) 440d191a2 Setup-Seite: Aktivierung von Standard-Plugins. AbstractPlugin: Korrektur des Vendor-Namens für Flyway.