org.hibernate.HibernateException: L’access à DialectResolutionInfo ne peut pas être nul lorsque ‘hibernate.dialect’ n’est pas défini

J’essaie de lancer une application Spring-Boot qui utilise Hibernate via Spring-JPA, mais je reçois cette erreur:

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 

mon fichier pom.xml est le suivant:

  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   

ma configuration d’hibernation est celle (la configuration du dialecte est dans la dernière méthode de cette classe):

 @Configuration @EnableTransactionManagement @ComponentScan({ "com.spring.app" }) public class HibernateConfig { @Bean public LocalSessionFactoryBean sessionFactory() { LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); sessionFactory.setDataSource(restDataSource()); sessionFactory.setPackagesToScan(new Ssortingng[] { "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"); } }; } } 

qu’est-ce que je fais mal ici?

Tout d’abord, supprimez toute votre configuration Spring Boot le lance pour vous. Si vous avez vraiment besoin d’une SessionFactory au lieu d’un EntityManagerFactory ajoutez un HibernateJpaSessionFactoryBean .

Assurez-vous d’avoir un application.properties dans votre chemin de classe et ajoutez les propriétés suivantes.

 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 

Si vous avez vraiment besoin d’accéder à une SessionFactory et que c’est essentiellement pour la même source de données, vous pouvez faire ce qui suit (qui est également documenté ici, mais pour XML, pas JavaConfig).

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

De cette façon, vous avez à la fois EntityManagerFactory et SessionFactory .

En supposant que vous ayez une classe avec une méthode main avec @EnableAutoConfiguration vous n’avez pas besoin de l’annotation @EnableTransactionManagement , car celle-ci sera activée par Spring Boot pour vous. Une classe d’application de base dans le package com.spring.app devrait suffire.

 @Configuration @EnableAutoConfiguration @ComponentScan public class Application { public static void main(Ssortingng[] args) throws Exception { SpringApplication.run(Application.class, args); } } 

Quelque chose comme cela devrait être suffisant pour que toutes vos classes (y compris les entités et les référentiels basés sur Spring Data) soient détectées.

Je suggère également de supprimer la dépendance commons-dbcp car cela permettrait à Spring Boot de configurer l’implémentation plus rapide et plus robuste de HikariCP .

J’étais confronté à un problème similaire lors du démarrage de l’application (avec Spring Boot) avec le serveur de firebase database arrêté .

Hibernate peut déterminer le dialecte correct à utiliser automatiquement, mais pour ce faire, une connexion en direct à la firebase database est nécessaire.

J’ai eu cette erreur quand ma firebase database n’a pas été créée. Après avoir créé la firebase database manuellement, cela a fonctionné correctement.

J’ai également fait face à un problème similaire. Mais, c’était dû au mot de passe invalide fourni. Aussi, je voudrais dire que votre code semble être un ancien code de style utilisant Spring. Vous avez déjà mentionné que vous utilisiez le boot de spring, ce qui signifie que la plupart des choses seront automatiquement configurées pour vous. Le dialecte hibernate sera automatiquement sélectionné en fonction du pilote de firebase database disponible sur le chemin de classe, avec des informations d’identification valides pouvant être utilisées pour tester correctement la connexion. S’il y a un problème avec la connexion, vous devrez à nouveau faire face à la même erreur. Seulement 3 propriétés requirejses dans application.properties

 # Replace with your connection ssortingng spring.datasource.url=jdbc:mysql://localhost:3306/pdb1 # Replace with your credentials spring.datasource.username=root spring.datasource.password= 

Ajouter spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQLDialect dans le fichier application.properties

J’ai rencontré le même problème et mon problème était que la firebase database que j’essayais de connecter n’existait pas.

J’ai créé la firebase database, vérifié l’URL / la chaîne de connexion et la redirection et tout fonctionnait comme prévu.

Cela se produit parce que votre code ne correspond pas à la connexion de la firebase database. Assurez-vous d’avoir le pilote et le nom d’utilisateur mysql, mot de passe correct.

Assurez-vous que votre application.properties a toutes les informations correctes:

  db.url: jdbc:mysql://localhost:3306/test 

Dans mon cas, l’utilisateur n’a pas pu se connecter à la firebase database. Si aura le même problème si le journal contient un avertissement juste avant l’exception:

 WARN HHH000342: Could not obtain connection to query metadata : Login failed for user 'my_user'. 

Assurez-vous d’avoir votre firebase database dans votre pom comme OP. C’était mon problème.

Mon problème était que la firebase database intégrée était déjà connectée. fermer la connexion

J’ai eu le même problème et il a été causé par l’impossibilité de se connecter à l’instance de firebase database. Recherchez l’erreur HHH000342 dans le journal au-dessus de cette erreur, cela devrait vous donner une idée de l’endroit où la connexion à la firebase database échoue (nom d’utilisateur / passe incorrect, URL, etc.)

Si vous utilisez cette ligne:

 sessionFactory.getHibernateProperties().put("hibernate.dialect", env.getProperty("hibernate.dialect")); 

Assurez-vous que env.getProperty("hibernate.dialect") n’est pas nul.

Cela m’est arrivé parce que je n’avais pas ajouté la conf.configure(); avant de commencer la session:

 Configuration conf = new Configuration(); conf.configure(); 

Assurez-vous que vous avez entré des détails valides dans application.properties et si votre serveur de firebase database est disponible. Par exemple, lorsque vous vous connectez avec MySQL, vérifiez si XAMPP fonctionne correctement.

J’ai rencontré le même problème: la firebase database que j’essayais de connecter n’existait pas. J’ai utilisé jpa.database=default (ce qui signifie que je vais essayer de me connecter à la firebase database, puis de sélectionner automatiquement le dialecte). Une fois que j’ai démarré la firebase database, cela a fonctionné sans aucune modification.

Idem mais dans un JBoss WildFly AS .

Résolu avec les propriétés dans mon META-INF/persistence.xml

      

Pour ceux qui travaillent avec AWS MySQL RDS, cela peut se produire lorsque vous ne pouvez pas vous connecter à la firebase database. Accédez au paramètre Groupes de sécurité AWS pour MySQL RDS et modifiez la règle IP entrante en actualisant MyIP.

J’ai fait face à ce problème et faire ci-dessus a résolu le problème pour moi.

J’ai rencontré ce problème en raison du retour de la version Mysql 8.0.11 à la version 5.7 pour moi

J’ai eu la même erreur après avoir utilisé la génération de code hibernate

https://www.mkyong.com/hibernate/how-to-generate-code-with-hibernate-tools/

alors le hibernate.cfg.xml été créé dans /src/main/java mais sans les parameters de connexion après sa suppression – mon problème a été résolu

J’ai eu ce problème quand Eclipse n’a pas pu trouver le pilote JDBC. J’ai dû faire un petit rafraîchissement de l’éclipse pour obtenir ce travail.