Hibernate首次连接MySQL数据库出现方言异常求助
解决Hibernate连接MySQL时的Dialect解析异常
嘿,刚上手Hibernate遇到这种问题很正常,别着急!看你贴的报错信息,核心问题就在这句:
无法将名称[org.hibernate.dialect.MySqlDialect]解析为策略[org.hibernate.dialect.Dialect]
问题原因
在Hibernate 5.3版本中,MySQL对应的方言类名是**org.hibernate.dialect.MySQLDialect**(注意第二个M是大写的),而你配置里写的是MySqlDialect(小写的s),系统找不到这个类,所以抛出了策略选择异常。
解决步骤
- 打开你的Hibernate配置文件(通常是
hibernate.cfg.xml,如果是JPA的话可能是persistence.xml) - 找到配置方言的那一行,把:
修改为:<property name="hibernate.dialect">org.hibernate.dialect.MySqlDialect</property><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> - 如果你是用Java代码硬编码配置的,也要同步把方言类的全限定名改成
org.hibernate.dialect.MySQLDialect
额外提示
如果你的MySQL版本是8.0及以上,建议使用更匹配的方言org.hibernate.dialect.MySQL8Dialect,这样能更好地支持新版本MySQL的特性。
附上你提供的错误日志:
2018年5月21日 11:53:10 AM org.hibernate.Version logVersion 信息:HHH000412: Hibernate Core {5.3.0.Final} 2018年5月21日 11:53:10 AM org.hibernate.cfg.Environment <clinit> 信息:HHH000206: hibernate.properties未找到 2018年5月21日 11:53:11 AM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit> 信息:HCANN000001: Hibernate Commons Annotations {5.0.3.Final} 2018年5月21日 11:53:13 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure 警告:HHH10001002: 使用Hibernate内置连接池(不适用于生产环境!) 2018年5月21日 11:53:13 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator 信息:HHH10001005: 使用驱动[com.mysql.jdbc.Driver],URL为[jdbc:mysql://localhost:3306/practice] 2018年5月21日 11:53:13 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator 信息:HHH10001001: 连接属性:{user=root, password=****} 2018年5月21日 11:53:13 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator 信息:HHH10001003: 自动提交模式:false 2018年5月21日 11:53:13 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init> 信息:HHH000115: Hibernate连接池大小:20(最小=1) 2018年5月21日 11:53:14 AM org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator initiateService 警告:HHH000342: 无法获取连接以查询元数据:无法将名称[org.hibernate.dialect.MySqlDialect]解析为策略[org.hibernate.dialect.Dialect] 主线程中出现异常:org.hibernate.service.spi.ServiceException: 无法创建请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:275) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:152) at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:286) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:243) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:179) at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:119) at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:84) at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:474) at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:85) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:689) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724) at test_class.Test_Class.main(Test_Class.java:20) 引起原因:org.hibernate.boot.registry.selector.spi.StrategySelectionException: 无法将名称[org.hibernate.dialect.MySqlDialect]解析为策略[org.hibernate.dialect.Dialect] at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.selectStrategyImplementor(StrategySelectorImpl.java:133) at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveStrategy(StrategySelectorImpl.java:211) at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveDefaultableStrategy(StrategySelectorImpl.java:159) at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveDefaultableStrategy(StrategySelectorImpl.java:146) at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveStrategy(StrategySelectorImpl.java:140) at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.constructDialect(DialectFactoryImpl.java:74) at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:51) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:137) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:94) at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) ... 14
内容的提问来源于stack exchange,提问作者abhi.manyu
相关产品推荐
相关产品推荐

