Я пытаюсь запустить приложение Spring-Boot, которое использует Hibernate через Spring-JPA, но я получаю эту ошибку:
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
мой файл pom.xml такой:
<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>
моя конфигурация гибернации такова (конфигурация диалекта находится в последнем методе из этого класса):
@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");
}
};
}
}
что я тут не так делаю?
application.propertes
? Я предпочитаю способ, где я делаю все настройки в классе HibernateConfig.Я столкнулся с аналогичной проблемой при запуске приложения (с использованием Spring Boot) с отключенным сервером базы данных .
Hibernate может определить правильный диалект для использования автоматически, но для этого ему нужно живое соединение с базой данных.
источник
добавить
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQLDialect
в файл application.propertiesисточник
Я получил эту ошибку, когда моя база данных не была создана. После создания БД вручную все работало нормально.
источник
Я также столкнулся с подобной проблемой. Но это произошло из-за предоставленного неверного пароля. Кроме того, я хотел бы сказать, что ваш код выглядит как код старого стиля с использованием Spring. Вы уже упоминали, что используете весеннюю загрузку, что означает, что большинство вещей будут автоматически настроены для вас. Диалект гибернации будет автоматически выбран на основе драйвера БД, доступного на пути к классам, вместе с действительными учетными данными, которые можно использовать для правильного тестирования соединения. Если есть какие-либо проблемы с подключением, вы снова столкнетесь с той же ошибкой. только 3 свойства необходимы в application.properties
источник
Я столкнулся с той же проблемой, и моя проблема заключалась в том, что БД, к которой я пытался подключиться, не существовала.
Я создал базу данных, проверил строку URL / соединения и перезапустил, и все заработало как положено.
источник
это происходит потому, что ваш код не связывает базу данных. Убедитесь, что у вас есть mysql драйвер и имя пользователя, пароль правильный.
источник
Убедитесь, что у вас
application.properties
есть вся правильная информация: (Я изменил мой порт БД с того,8889
чтобы3306
он работал)источник
В весенней загрузке для jpa java config вам нужно расширить JpaBaseConfiguration и реализовать его абстрактные методы.
источник
Удалите избыточную конфигурацию Hibernate
Если вы используете Spring Boot, вам не нужно явно указывать конфигурацию JPA и Hibernate, поскольку Spring Boot может сделать это за вас.
Добавить свойства конфигурации базы данных
В
application.properties
файле конфигурации Spring Boot у вас есть добавить свойства конфигурации вашей базы данных:Добавить Hibernate конкретные свойства
И в том же
application.properties
файле конфигурации вы также можете установить пользовательские свойства Hibernate:Это оно!
источник
У меня была такая же проблема. добавление этого в application.properties решило проблему:
источник
В моем случае пользователь не может подключиться к базе данных. Если возникнет та же проблема, если журнал содержит предупреждение перед исключением:
источник
Убедитесь, что у вас в базе есть база данных, как у OP. Это была моя проблема.
источник
Моя проблема заключалась в том, что встроенная база данных уже была подключена. тесная связь
источник
Я получил эту проблему, когда Eclipse не смог найти драйвер JDBC. Пришлось сделать обновление Gradle от затмения, чтобы получить эту работу.
источник
Ниже приведены некоторые из причин
hibernate.dialect
неустановленной проблемы. Большинство из этих исключений отображаются в журнале запуска, за которым, наконец, следует упомянутая проблема.Пример: загрузочное приложение Spring с Postgres DB
1. Проверьте, установлена ли база данных и запущен ли ее сервер.
2. Проверьте, правильно ли указано имя базы данных.
org.postgresql.util.PSQLException: FATAL: база данных "foo" не существует
В
application.properties
файле,но
foo
не существовало. Поэтому я создал базу данных из pgAdmin для postgres3. Проверьте, доступны ли имя хоста и порт сервера.
4. Проверьте правильность учетных данных базы данных.
org.postgresql.util.PSQLException: FATAL: сбой аутентификации по паролю для пользователя "postgres"
spring.datasource.username= {DB USERNAME HERE}
spring.datasource.password= {DB PASSWORD HERE}
источник
Если вы используете эту строку:
убедитесь, что
env.getProperty("hibernate.dialect")
это не ноль.источник
Решено со свойствами в моем
META-INF/persistence.xml
источник
Для тех, кто работает с AWS MySQL RDS, это может произойти, если вы не можете подключиться к базе данных. Перейдите к настройке групп безопасности AWS для MySQL RDS и измените правило входящих IP-адресов, обновив MyIP.
Я столкнулся с этой проблемой, и выполнение выше помогло мне решить проблему.
источник
У меня тоже была эта проблема. В моем случае это было из-за того, что пользователю MySQL не было назначено никаких грантов. Назначение грантов пользователю MySQL, который использует мое приложение, решило проблему:
источник
У меня была такая же проблема, и после отладки оказалось, что Spring application.properties имел неправильный IP-адрес для сервера БД
источник
Я воспроизвел это сообщение об ошибке в следующих трех случаях:
Очевидное решение состоит в том, чтобы создать нового пользователя базы данных с тем же именем пользователя и паролем, что и в приложении весенней загрузки, или изменить имя пользователя и пароль в файлах приложения весенней загрузки, чтобы соответствовать существующему пользователю базы данных и предоставить достаточные привилегии этому пользователю базы данных. В случае базы данных MySQL это можно сделать, как показано ниже:
Очевидно, что в Postgresql есть похожие команды, но я не проверял, можно ли в этих трех случаях воспроизвести это сообщение об ошибке в Postgresql.
источник
У меня была та же самая проблема, и это было вызвано неспособностью соединиться с экземпляром базы данных. Ищите ошибку hibernate HHH000342 в журнале над этой ошибкой, она должна дать вам представление о том, где происходит сбой соединения с БД (неверное имя пользователя / пароль, URL и т. Д.)
источник
Это случилось со мной, потому что я не добавил
conf.configure();
до начала сессии:источник
Убедитесь, что вы ввели правильные данные в application.properties и укажите, доступен ли ваш сервер базы данных. Например, когда вы подключаетесь к MySQL, проверьте, правильно ли работает XAMPP .
источник
Я столкнулся с той же проблемой: база данных, которую я пытался подключить, не существовала. Я использовал
jpa.database=default
(что, я думаю, означает, что он будет пытаться подключиться к базе данных, а затем автоматически выбрать диалект). Как только я запустил базу данных, она работала нормально без каких-либо изменений.источник
Я столкнулся с этой проблемой из-за версии Mysql 8.0.11, возвращающейся к 5.7, решенной для меня
источник
У меня была такая же ошибка после использования спящего поколения кода
https://www.mkyong.com/hibernate/how-to-generate-code-with-hibernate-tools/
затем
hibernate.cfg.xml
был создан в,/src/main/java
но без параметров подключения после его удаления - моя проблема была решенаисточник
Если предыдущая ошибка в журнале была такой: «ОШИБКА - HikariPool-1 - требуется jdbcUrl с driverClassName», то решение состоит в том, чтобы переписать «url» в «jdbc-url» в соответствии с этим: База данных application.yml для загрузки Spring из приложений .properties
источник
У меня была такая же ошибка,
в моем случае WAR имел внутри application.properties, который указывал на сервер разработки,
где external application.properties указывал на нужный сервер БД.
убедитесь, что у вас нет других application.properties в classpath / jars ...
источник