J'essaie d'exécuter 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:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.1.8.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
</dependency>
</dependencies>
ma configuration de mise en veille prolongée est que (la configuration de 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 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");
}
};
}
}
ce que je fais mal ici?
application.propertes
? Je préfère une manière où je fais toute la configuration dans la classe HibernateConfig.J'étais confronté à un problème similaire lors du démarrage de l'application (à l'aide de Spring Boot) avec le serveur de base de données arrêté .
Hibernate peut déterminer le dialecte correct à utiliser automatiquement, mais pour ce faire, il a besoin d'une connexion en direct à la base de données.
la source
ajouter
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQLDialect
dans le fichier application.propertiesla source
J'ai eu cette erreur lorsque ma base de données n'a pas été créée. Après avoir créé la base de données manuellement, cela a bien fonctionné.
la source
J'ai également rencontré un problème similaire. Mais c'était dû au mot de passe invalide fourni. Je voudrais également dire que votre code semble être un code à l'ancienne utilisant Spring. Vous avez déjà mentionné que vous utilisez Spring Boot, ce qui signifie que la plupart des choses seront configurées automatiquement pour vous. le dialecte d'hibernation sera automatiquement sélectionné en fonction du pilote de base de données disponible sur le chemin de classe ainsi que des informations d'identification valides qui peuvent être utilisées pour tester correctement la connexion. S'il y a un problème avec la connexion, vous serez de nouveau confronté à la même erreur. seulement 3 propriétés nécessaires dans application.properties
la source
J'ai rencontré le même problème et mon problème était que la base de données à laquelle j'essayais de me connecter n'existait pas.
J'ai créé la base de données, vérifié la chaîne URL / connexion et réanimé et tout a fonctionné comme prévu.
la source
cela se produit car votre code n'est pas une balle pour connecter la base de données. Assurez-vous d'avoir le pilote et le nom d'utilisateur mysql, mot de passe correct.
la source
Assurez - vous que votre
application.properties
a toutes informations correctes: (j'ai changé mon port db à partir8889
de3306
cela a fonctionné)la source
Dans Spring Boot pour jpa java config, vous devez étendre JpaBaseConfiguration et implémenter ses méthodes abstraites.
la source
Supprimer la configuration Hibernate redondante
Si vous utilisez Spring Boot, vous n'avez pas besoin de fournir explicitement la configuration JPA et Hibernate, car Spring Boot peut le faire pour vous.
Ajouter des propriétés de configuration de base de données
Dans le
application.properties
fichier de configuration Spring Boot, vous devez ajouter les propriétés de configuration de votre base de données:Ajouter des propriétés spécifiques à Hibernate
Et, dans le même
application.properties
fichier de configuration, vous pouvez également définir des propriétés Hibernate personnalisées:C'est tout!
la source
J'ai eu le même problème. l'ajout de cela à l'application.properties a résolu le problème:
la source
Dans mon cas, l'utilisateur n'a pas pu se connecter à la base de données. Si aura le même problème si le journal contient un avertissement juste avant l'exception:
la source
Assurez-vous d'avoir votre base de données dans votre pom comme OP l'a fait. C'était mon problème.
la source
Mon problème était que la base de données intégrée était déjà connectée. fermer la connexion
la source
J'ai eu ce problème quand Eclipse n'a pas pu trouver le pilote JDBC. J'ai dû faire un rafraîchissement graduel de l'éclipse pour obtenir ce travail.
la source
Voici quelques-unes des raisons du
hibernate.dialect
problème non défini. La plupart de ces exceptions sont affichées dans le journal de démarrage qui est finalement suivi du problème mentionné.Exemple: dans l'application de démarrage Spring avec Postgres DB
1. Vérifiez si la base de données est réellement installée et que son serveur est démarré.
2. Vérifiez si le nom de la base de données est correctement mentionné.
org.postgresql.util.PSQLException: FATAL: la base de données "foo" n'existe pas
En
application.properties
dossier,mais
foo
n'existait pas. J'ai donc créé la base de données de pgAdmin pour postgres3. Vérifiez si le nom d'hôte et le port du serveur sont accessibles.
4. Vérifiez si les informations d'identification de la base de données sont correctes.
org.postgresql.util.PSQLException: FATAL: l'authentification par mot de passe a échoué pour l'utilisateur "postgres"
spring.datasource.username= {DB USERNAME HERE}
spring.datasource.password= {DB PASSWORD HERE}
la source
Si vous utilisez cette ligne:
assurez-vous que ce
env.getProperty("hibernate.dialect")
n'est pas nul.la source
Résolu avec des propriétés dans mon
META-INF/persistence.xml
la source
Pour ceux qui travaillent avec AWS MySQL RDS, cela peut se produire lorsque vous ne parvenez pas à vous connecter à la base de données. Accédez au paramètre AWS Security Groups pour MySQL RDS et modifiez la règle IP entrante en actualisant MyIP.
J'ai rencontré ce problème et faire ci-dessus a résolu le problème pour moi.
la source
J'ai aussi eu ce problème. Dans mon cas, c'est parce qu'aucune subvention n'a été attribuée à l'utilisateur MySQL. L'attribution de subventions à l'utilisateur MySQL que mon application utilise a résolu le problème:
la source
J'ai eu le même problème et après le débogage, il s'avère que Spring application.properties avait une mauvaise adresse IP pour le serveur DB
la source
J'ai reproduit ce message d'erreur dans les trois cas suivants:
La solution évidente consiste à créer un nouvel utilisateur de base de données avec les mêmes nom d'utilisateur et mot de passe que dans l'application Spring-Boot ou à changer le nom d'utilisateur et le mot de passe dans vos fichiers d'application Spring-Boot pour correspondre à un utilisateur de base de données existant et accorder des privilèges suffisants à cet utilisateur de base de données. Dans le cas d'une base de données MySQL, cela peut être fait comme indiqué ci-dessous:
Évidemment, il existe des commandes similaires dans Postgresql mais je n'ai pas testé si dans le cas de Postgresql ce message d'erreur peut être reproduit dans ces trois cas.
la source
J'ai eu le même problème et il a été causé par l'impossibilité de se connecter à l'instance de base de données. Recherchez l'erreur de mise en veille prolongée HHH000342 dans le journal au-dessus de cette erreur, cela devrait vous donner une idée de l'endroit où la connexion db échoue (nom d'utilisateur / passe incorrect, URL, etc.)
la source
Cela m'est arrivé car je n'avais pas ajouté le
conf.configure();
avant de commencer la session:la source
Assurez-vous que vous avez entré des détails valides dans application.properties et si votre serveur de base de données est disponible. Par exemple, lorsque vous vous connectez avec MySQL, vérifiez si XAMPP fonctionne correctement.
la source
J'ai rencontré le même problème: la base de données que j'essayais de connecter n'existait pas. J'ai utilisé
jpa.database=default
(ce qui signifie, je suppose, qu'il essaiera de se connecter à la base de données, puis de sélectionner automatiquement le dialecte). Une fois que j'ai démarré la base de données, cela a bien fonctionné sans aucun changement.la source
J'ai rencontré ce problème en raison du retour de la version Mysql 8.0.11 à 5.7 résolu pour moi
la source
J'ai eu la même erreur après avoir utilisé la génération de code de mise en veille prolongée
https://www.mkyong.com/hibernate/how-to-generate-code-with-hibernate-tools/
alors le a
hibernate.cfg.xml
été créé dans/src/main/java
mais sans les paramètres de connexion après l'avoir supprimé - mon problème a été résolula source
Si l'erreur précédente dans le journal était la suivante: "ERREUR - HikariPool-1 - jdbcUrl est requis avec driverClassName", la solution consiste à réécrire "url" en "jdbc-url" en fonction de ceci: Database application.yml pour le démarrage de printemps à partir des applications .Propriétés
la source
J'ai eu la même erreur,
dans mon cas, le fichier WAR contenait application.properties qui pointait vers un serveur de développement
où application.properties externe pointait vers le bon serveur de base de données.
assurez-vous que vous n'avez pas d'autre application.properties dans le classpath / jars ...
la source