我正在尝试通过spring jpa运行一个使用hibernate的spring boot应用程序,但出现以下错误:
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>
我的hibernate配置是(方言配置在这个类的最后一个方法中):
@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");
}
};
}
}
我做错什么了?
30条答案
按热度按时间b4qexyjb1#
当eclipse无法找到jdbc驱动程序时,我遇到了这个问题。为了完成这项工作,我们必须在Eclipse中做一次渐变刷新。
vwoqyblh2#
在使用hibernate代码生成之后,我也遇到了同样的错误
https://www.mkyong.com/hibernate/how-to-generate-code-with-hibernate-tools/
然后
hibernate.cfg.xml
创建于/src/main/java
但是没有连接参数后,删除它-我的问题解决了0sgqnhkj3#
我面临这个问题,因为mysql 8.0.11版本恢复到5.7为我解决了
wqnecbli4#
我面临同样的问题:我试图连接的数据库不存在。我曾经
jpa.database=default
(我猜这意味着它将尝试连接到数据库,然后自动选择方言)。一旦我启动了数据库,它运行良好,没有任何变化。brjng4g35#
请确保在application.properties中输入了有效的详细信息,以及数据库服务器是否可用。例如,当您连接mysql时,请检查xampp是否正常运行。
f87krz0w6#
这发生在我身上,因为我没有添加
conf.configure();
开始会话之前:kmpatx3s7#
我有同样的问题,这是由于无法连接到数据库示例。在该错误上面的日志中查找hibernate错误hh000342,它会让您知道数据库连接失败的位置(用户名/密码、url等不正确)
flseospp8#
原来没有人提到布景
spring.jpa.database=mysql
在application.properties
文件,如果您使用springjpa。这是对我最简单的回答,我想分享这个问题。qni6mghb9#
我在以下三种情况下复制了此错误消息:
不存在用户名写在application.properties文件或persistence.properties文件或hibernateconfig文件中的数据库用户
部署的数据库中有该用户,但该用户使用的密码与上述文件中的密码不同
数据库拥有与该用户和密码匹配的用户,但该用户没有完成spring boot应用程序执行的所有数据库任务所需的所有权限
显而易见的解决方案是使用与spring boot应用程序中相同的用户名和密码创建新的数据库用户,或者更改spring boot应用程序文件中的用户名和密码,以匹配现有的数据库用户,并向该数据库用户授予足够的权限。对于mysql数据库,可以按如下所示进行:
显然,postgresql中也有类似的命令,但我还没有测试postgresql是否可以在这三种情况下重现此错误消息。
u59ebvdq10#
添加
spring.jpa.database-platform=org.hibernate.dialect.MariaDB53Dialect
我的财产档案对我有用。ps:我在用mariadb
6mzjoqzu11#
我也遇到了同样的问题,调试后发现spring application.properties的db server ip地址错误
wsxa1bj112#
我也有这个问题。在我的例子中,这是因为没有授予mysql用户权限。将授权分配给我的应用程序使用的mysql用户解决了以下问题:
2j4z5cfb13#
对于那些使用aws-mysql-rds的用户,当您无法连接到数据库时可能会发生这种情况。转到aws security groups setting for mysql rds,通过刷新myip来编辑入站ip规则。
我面对这个问题,做上述得到的问题为我解决。
v09wglhw14#
与jboss wildfly相同。
解决了我的问题
META-INF/persistence.xml
```uttx8gqw15#
如果您使用这条线:
确保
env.getProperty("hibernate.dialect")
不为空。