Org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set

9.2K    Asked by GillianHamer in Java , Asked on Apr 19, 2021
As I am trying to run a spring-boot application that uses hibernate via spring-jpa, but I am getting this error:
Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
        at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:104)
        at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:71)
        at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:205)
        at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206)
        at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1885)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1843)
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850)
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:843)
        at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:398)
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:842)
        at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:152)
        at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:336)
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:318)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1613)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1550)
        ... 21 more
my pom.xml file is this:

    org.springframework.boot
    spring-boot-starter-parent
    1.1.8.RELEASE


    
        org.springframework.boot
        spring-boot-starter-web
    
    
        org.springframework.boot
        spring-boot-starter-actuator
    
    
        org.springframework.security
        spring-security-web
       
    
        org.springframework.security
        spring-security-config
    
    
        org.springframework.security
        spring-security-taglibs
    
    
        org.springframework.boot
        spring-boot-starter-data-jpa
    
    
        commons-dbcp
        commons-dbcp
    

my hibernate configuration is that (the dialect configuration is in the last method from this class):
@Configuration
@EnableTransactionManagement
@ComponentScan({ "com.spring.app" })
public class HibernateConfig {
   @Bean
   public LocalSessionFactoryBean sessionFactory() {
      LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
      sessionFactory.setDataSource(restDataSource());
      sessionFactory.setPackagesToScan(new String[] { "com.spring.app.model" });
      sessionFactory.setHibernateProperties(hibernateProperties());
      return sessionFactory;
   }
   @Bean
   public DataSource restDataSource() {
      BasicDataSource dataSource = new BasicDataSource();
      dataSource.setDriverClassName("org.postgresql.Driver");
      dataSource.setUrl("jdbc:postgresql://localhost:5432/teste?charSet=LATIN1");
      dataSource.setUsername("klebermo");
      dataSource.setPassword("123");
      return dataSource;
   }
   @Bean
   @Autowired
   public HibernateTransactionManager transactionManager(SessionFactory sessionFactory) {
      HibernateTransactionManager txManager = new HibernateTransactionManager();
      txManager.setSessionFactory(sessionFactory);
      return txManager;
   }
   @Bean
   public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
      return new PersistenceExceptionTranslationPostProcessor();
   }
   Properties hibernateProperties() {
      return new Properties() {
         /**
         * 
         */
        private static final long serialVersionUID = 1L;
        {
            setProperty("hibernate.hbm2ddl.auto", "create");
            setProperty("hibernate.show_sql", "false");
            setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect");
         }
      };
   }
}
what’s wrong here?

Answered by Gillian Hamer

Hibernate can determine the correct dialect to use automatically, but in order to do this, it needs a live connection to the database.


Note: To resolve error “access to dialectresolutioninfo cannot be null when 'hibernate.dialect' not set”.

Make sure you have mysql driver and username, password correct. In spring boot for jpa java config you need to extend JpaBaseConfiguration and implement it's abstract methods. The following are some of the reasons for the hibernate. dialect not set issue.



Your Answer

Answer (1)

The error message you're encountering typically arises in Hibernate when it's unable to determine the appropriate SQL dialect to use for your database. This can happen when Hibernate is unable to access the necessary information to resolve the dialect, such as when the hibernate.dialect property is not set in your Hibernate configuration.


To resolve this issue, you need to ensure that you have correctly configured Hibernate with the appropriate dialect for your database. The dialect typically corresponds to the type of database you are using (e.g., MySQL, PostgreSQL, Oracle, etc.).

Here's what you can do:

Check Hibernate Configuration: Make sure that you have properly set up your Hibernate configuration file (usually hibernate.cfg.xml or hibernate.properties) and that the hibernate.dialect property is set to the correct dialect for your database.



Example (for MySQL):

org.hibernate.dialect.MySQLDialect

Verify Database Connection: Ensure that your application is able to connect to your database properly. If there are any connection issues, Hibernate may not be able to determine the dialect.

Check Classpath: Make sure that all necessary Hibernate and database driver JAR files are included in your application's classpath.

Database Configuration: If you're still encountering issues, double-check your database configuration and make sure everything is set up correctly.

If you've checked all these points and are still experiencing the issue, it might be helpful to provide more context or code snippets so I can offer more specific assistance.

7 Months

Interviews

Parent Categories