DatabaseDialect.ktorg.hibernate.dialect.PostgreSQLDialect) и HSQLDB (org.hibernate.dialect.HSQLDialect). Служит единым источником истины для конфигурации типа базы данных при загрузке приложения, разрешении скриптов миграции Flyway и настройке фабрики сессий Hibernate.asString: String через первичный конструктор@JvmStatic@JvmStatic для fromString() делает его вызываемым как DatabaseDialect.fromString(...) из Java-кода, а не DatabaseDialect.Companion.fromString(...)| Константа | Класс диалекта Hibernate | Поставщик Flyway | Контекст использования |
|---|---|---|---|
PostgreSQL | org.hibernate.dialect.PostgreSQLDialect | postgresql | Продуктивные развертывания — рекомендуемая производственная база данных |
HSQL | org.hibernate.dialect.HSQLDialect | hsqldb | Разработка/тестирование, встроенная установка — используется мастером установки для однопользовательских/локальных инсталляций |
Ищет диалект по имени класса Hibernate. Возвращает null, если совпадение не найдено — вызывающие стороны должны обрабатывать случай null (обычно по умолчанию используется HSQL для разработки). Метод использует простую цепочку if-else, а не поисковую карту, что уместно для небольшого количества поддерживаемых диалектов.
Сопоставляет имя продукта JDBC-драйвера с именем каталога поставщика Flyway. Это критически важно для обнаружения скриптов миграции базы данных Flyway. Flyway организует скрипты миграции в каталогах, специфичных для поставщика:
flyway/{module}/migrate/postgresql/V1.1.0__RELEASE-RemoveMGC.sql
flyway/{module}/migrate/hsqldb/V1.1.0__RELEASE-RemoveMGC.sql
Метод проверяет, содержит ли имя продукта "hsql" (без учета регистра), и возвращает "hsqldb" или "postgresql" соответственно. Это позволяет одной и той же логике миграции работать с разными типами баз данных — специфичные для поставщика различия в SQL (например, синтаксис типов столбцов, работа с последовательностями) изолированы в скриптах миграции, специфичных для поставщика.
Файл содержит комментарий со списком ранее рассматриваемых или запланированных баз данных:
// Пока не поддерживается: // MYSQL, ORACLE, MS_SQL_SERVER, DB2, INFORMIX, DERBY, UNKOWN;
Это раскрывает замысел поддерживать несколько баз данных — обычное требование для корпоративного программного обеспечения. Текущая реализация поддерживает только PostgreSQL (для продакшена) и HSQLDB (для встраиваемой/разработки), при этом архитектура готова к расширению.
Перечисление DatabaseDialect является частью многоуровневой абстракции базы данных:
asString предоставляет класс диалекта Hibernate для hibernate.cfg.xml или автоконфигурации Spring BootgetFlywayVendorName() направляет к скриптам миграции SQL, специфичным для поставщикаЭтот файл — один из ранних файлов Kotlin в модуле projectforge-common (наряду с другими служебными классами). Использование Kotlin для этого перечисления обеспечивает:
fromString() — DatabaseDialect? — заставляет вызывающие стороны обрабатывать случай nullgetFlywayVendorName() использует простое совпадение подстроки (contains("hsql")), а не точное сравнение. Это может привести к ложным срабатываниям, если имя продукта базы данных случайно содержит "hsql" как подстроку. Более надежным подходом было бы сопоставление с точным списком известных имен продуктов.init/common (создание схемы) и migrate/{vendor} (версионно-специфичные миграции). Такое разделение позволяет базовой схеме быть независимой от базы данных, в то время как миграции, специфичные для поставщика, обрабатывают различия в синтаксисе SQL или функциях (такие как обработка последовательностей в PostgreSQL и HSQLDB или миграция "RemoveMGC", видимая в каталогах flyway проекта).868d6abb7 2025 -> 2026 63081666f Заголовки исходных файлов: 2024-> 2025. b6092df09 Авторское право 2023 -> 2024 ab45d51fa Авторское право 2001-2022 -> 2001-2023. 5f7ef41b8 Авторское право 2021 -> 2022 637063dd7 Ничего (исправлен заголовок исходного файла) 440d191a2 Страница настройки: активация стандартных плагинов. AbstractPlugin: Исправление имени поставщика для flyway.