Spring boot Hibernate error “Access to DialectResolutionInfo cannot be null when ‘hibernate.dialect’ not set” when working with multiple data sources

I figure it out.

Modify method entityManagerFactory for both Db2Configuration and OracleConfiguration to supply them with the information about hibernate dialect:

for DB2

@Primary
@Bean(name = "db2EntityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
        EntityManagerFactoryBuilder builder
        , @Qualifier("db2DataSource") DataSource dataSource) {

    final HashMap<String, Object> hibernateProperties = new HashMap<String, Object>();
    hibernateProperties.put("hibernate.dialect", "org.hibernate.dialect.DB2390Dialect");

    return builder
            .dataSource(dataSource)
            .packages("project.dataconfig.db2.entity")
            .properties(hibernateProperties)
            .persistenceUnit("db2persistanceunit")
            .build();
}

for Oracle

@Bean(name = "oracleEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
        EntityManagerFactoryBuilder builder
        , @Qualifier("oracleDataSource") DataSource dataSource) {

    final HashMap<String, Object> hibernateProperties = new HashMap<String, Object>();
    hibernateProperties.put("hibernate.dialect", "org.hibernate.dialect.Oracle10gDialect");

    return builder
            .dataSource(dataSource)
            .packages("project.dataconfig.oracle.entity")
            .properties(hibernateProperties)
            .persistenceUnit("oraclepersistanceunit")
            .build();
}

After this, my console shows when running app, indicating all is good:

HHH000400: Using dialect: org.hibernate.dialect.DB2390Dialect
 Initialized JPA EntityManagerFactory for persistence unit 'db2persistanceunit'
HHH000204: Processing PersistenceUnitInfo [name: oraclepersistanceunit]
HHH000400: Using dialect: org.hibernate.dialect.Oracle10gDialect
Initialized JPA EntityManagerFactory for persistence unit 'oraclepersistanceunit'

My actuator /health endpoint also sees both databases as up and running.

Leave a Comment