chevron_left

Problem :

I want to run the spring-boot application which uses the hibernate via spring-jpa, but I am facing the below 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:114)at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:82)at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:312)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:222)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:345)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:308)

I need your help, thanks

Solution :

I also faced the similar issue in the recent past. And it was due to a invalid password provided. Also, I would like to say that your code seems to be very old-style code using the spring. You have already mentioned that you are trying to use the spring boot, which clearly means most of your things will be completely auto configured for you. The Hibernate dialect will also be auto selected based on your DB driver available on your classpath along with your valid credentials which can also be used to test your connection properly. If there is any issue with your connection then you will have to again face your same error. So you only need Three properties in your application.properties

# Replace with the valid connection string
spring.datasource.url=jdbc:mysql://localhost:xxxx/pdb1
# Replace with the valid credentials
spring.datasource.username=root
spring.datasource.password=

If you follow the above approach properly then you will be able to resolve your issue with minimum effort on your side.

Another Solution:

First remove all of your configuration Spring Boot will begin it for you. In case you truly require a SessionFactory instead of an EntityManagerFactory include a HibernateJpaSessionFactoryBean.

Ensure that you have an application.properties in your classpath and include the following properties.

spring.datasource.driverClassName=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:5432/teste?charSet=LATIN1
spring.datasource.username=klebermo
spring.datasource.password=123

spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.show-sql=false
spring.jpa.hibernate.ddl-auto=create

In case you truly require access to a SessionFactory and that is originally for a similar data source, then you can do the following (which is further documented here although for XML, not JavaConfig).

@Configuration        
public class HibernateConfig {

    @Bean
    public HibernateJpaSessionFactoryBean sessionFactory(EntityManagerFactory emf) {
         HibernateJpaSessionFactoryBean factory = new HibernateJpaSessionFactoryBean();
         factory.setEntityManagerFactory(emf);
         return factory;
    }
}

In that method you have both an EntityManagerFactory and a SessionFactory.

Pretending you have a class with a main method with @EnableAutoConfiguration you don't require the @EnableTransactionManagement annotation, as that will be enabled by Spring Boot for you. A basic application class in the com.spring.app package must be enough.

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {


    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);
    }

} 

Something like that must be enough to have all your classes (together with entities and Spring Data based repositories) detected.

I would also point out removing the commons-dbcp dependency as that would approve Spring Boot to configure the faster and more robust HikariCP implementation.

Including the following line to the properties file solve this problem at the time I had that error

spring.jpa.database=mysql

Thanks

More Posts

Error creating bean with name 'entitymanagerfactory' defined in class path resource Alecxe01 - Nov 14
Could not get constructor for org.hibernate.persister.entity.singletableentitypersister Alecxe01 - Nov 14
Hibernate - Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1 Sabbir Hossain - Mar 31
Org.hibernate.exception.sqlgrammarexception: could not execute statement kesav.eee - Jun 14
'mvn' is not recognized as an internal or external command, operable program or batch file. Alecxe01 - Nov 6
Error: could not find or load main class org.codehaus.plexus.classworlds.launcher.launcher Alecxe01 - Oct 30
Org.hibernate.hibernateexception: no session found for current thread kesav.eee - Jun 14
Can we have multiple sessionfactory in hibernate kesav.eee - Jun 1
web server failed to start. port 8080 was already in use. SharadMagar450 - Aug 31
java.util.zip.zipexception invalid cen header (bad signature) SharadMagar450 - Jul 31