diff --git a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/Dialects.java b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/Dialects.java index 4fd8e24b84a3d..283fcf28f90f5 100644 --- a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/Dialects.java +++ b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/Dialects.java @@ -14,42 +14,13 @@ private Dialects() { public static String guessDialect(String persistenceUnitName, String resolvedDbKind, List dbKindMetadataBuildItems) { - // For now select the latest dialect from the driver - // later, we can keep doing that but also avoid DCE - // of all the dialects we want in so that people can override them - if (DatabaseKind.isDB2(resolvedDbKind)) { - return "org.hibernate.dialect.DB297Dialect"; - } - if (DatabaseKind.isPostgreSQL(resolvedDbKind)) { - return "io.quarkus.hibernate.orm.runtime.dialect.QuarkusPostgreSQL10Dialect"; - } - if (DatabaseKind.isH2(resolvedDbKind)) { - return "io.quarkus.hibernate.orm.runtime.dialect.QuarkusH2Dialect"; - } - if (DatabaseKind.isMariaDB(resolvedDbKind)) { - return "org.hibernate.dialect.MariaDB106Dialect"; - } - if (DatabaseKind.isMySQL(resolvedDbKind)) { - return "org.hibernate.dialect.MySQL8Dialect"; - } - if (DatabaseKind.isOracle(resolvedDbKind)) { - return "org.hibernate.dialect.Oracle12cDialect"; - } - if (DatabaseKind.isDerby(resolvedDbKind)) { - return "org.hibernate.dialect.DerbyTenSevenDialect"; - } - if (DatabaseKind.isMsSQL(resolvedDbKind)) { - return "org.hibernate.dialect.SQLServer2016Dialect"; - } - - // This is created for third party extentions. I think hardcode above can be refactored by owners for (DatasourceDbKindHibernateOrmMetadataBuildItem item : dbKindMetadataBuildItems) { if (DatabaseKind.is(resolvedDbKind, item.getDbKind())) { return item.getDialect(); } } - String error = "Hibernate extension could not guess the dialect from the database kind '" + resolvedDbKind + String error = "The Hibernate ORM extension could not guess the dialect from the database kind '" + resolvedDbKind + "'. Add an explicit '" + HibernateOrmConfig.puPropertyKey(persistenceUnitName, "dialect") + "' property."; throw new ConfigurationException(error); } diff --git a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmProcessor.java b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmProcessor.java index c79bab41cac55..9c7b39916c719 100644 --- a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmProcessor.java +++ b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmProcessor.java @@ -80,6 +80,7 @@ import io.quarkus.arc.deployment.staticmethods.InterceptedStaticMethodsTransformersRegisteredBuildItem; import io.quarkus.arc.processor.DotNames; import io.quarkus.datasource.common.runtime.DataSourceUtil; +import io.quarkus.datasource.common.runtime.DatabaseKind; import io.quarkus.deployment.Capabilities; import io.quarkus.deployment.Capability; import io.quarkus.deployment.Feature; @@ -169,6 +170,27 @@ public final class HibernateOrmProcessor { private static final String INTEGRATOR_SERVICE_FILE = "META-INF/services/org.hibernate.integrator.spi.Integrator"; + @BuildStep + void registerHibernateOrmMetadataForCoreDialects( + BuildProducer producer) { + producer.produce(new DatasourceDbKindHibernateOrmMetadataBuildItem(DatabaseKind.DB2, + "org.hibernate.dialect.DB297Dialect")); + producer.produce(new DatasourceDbKindHibernateOrmMetadataBuildItem(DatabaseKind.DERBY, + "org.hibernate.dialect.DerbyTenSevenDialect")); + producer.produce(new DatasourceDbKindHibernateOrmMetadataBuildItem(DatabaseKind.H2, + "io.quarkus.hibernate.orm.runtime.dialect.QuarkusH2Dialect")); + producer.produce(new DatasourceDbKindHibernateOrmMetadataBuildItem(DatabaseKind.MARIADB, + "org.hibernate.dialect.MariaDB106Dialect")); + producer.produce(new DatasourceDbKindHibernateOrmMetadataBuildItem(DatabaseKind.MSSQL, + "org.hibernate.dialect.SQLServer2016Dialect")); + producer.produce(new DatasourceDbKindHibernateOrmMetadataBuildItem(DatabaseKind.MYSQL, + "org.hibernate.dialect.MySQL8Dialect")); + producer.produce(new DatasourceDbKindHibernateOrmMetadataBuildItem(DatabaseKind.ORACLE, + "org.hibernate.dialect.Oracle12cDialect")); + producer.produce(new DatasourceDbKindHibernateOrmMetadataBuildItem(DatabaseKind.POSTGRESQL, + "io.quarkus.hibernate.orm.runtime.dialect.QuarkusPostgreSQL10Dialect")); + } + @BuildStep void checkTransactionsSupport(Capabilities capabilities) { // JTA is necessary for blocking Hibernate ORM but not necessarily for Hibernate Reactive