无法将名称 [org.hibernate.dialect.MySQL5Dialect] 解析为策略 [org.hibernate.dialect.Dialect]

Posted

技术标签:

【中文标题】无法将名称 [org.hibernate.dialect.MySQL5Dialect] 解析为策略 [org.hibernate.dialect.Dialect]【英文标题】:Unable to resolve name [org.hibernate.dialect.MySQL5Dialect ] as strategy [org.hibernate.dialect.Dialect] 【发布时间】:2016-02-04 19:30:25 【问题描述】:

我是使用 Gradle 的 Spring 应用程序的新手。 运行我的项目以根据我创建的类创建数据库对象,我收到以下错误:

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.boot.registry.selector.spi.StrategySelectionException: Unable to resolve name [org.hibernate.dialect.mysql5Dialect ] as strategy [org.hibernate.dialect.Dialect]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1572)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:960)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:749)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:117)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:689)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:969)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:958)
at com.krypton.smartImmo.SmartImmoApplication.main(SmartImmoApplication.java:10)

Caused by: org.hibernate.boot.registry.selector.spi.StrategySelectionException: Unable to resolve name [org.hibernate.dialect.MySQL5Dialect ] as strategy [org.hibernate.dialect.Dialect]
at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.selectStrategyImplementor(StrategySelectorImpl.java:128)
at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveDefaultableStrategy(StrategySelectorImpl.java:155)
at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveStrategy(StrategySelectorImpl.java:136)
at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.constructDialect(DialectFactoryImpl.java:78)
at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:68)
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:165)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111)

application.properties 我有以下关于休眠的设置

spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect 

【问题讨论】:

你使用的是哪个版本的休眠? @GergelyBacso 版本 4.3.11.Final 我认为您在“org.hibernate.dialect.MySQL5Dialect”之后添加了一个空格 ....?我在堆栈跟踪“[org.hibernate.dialect.MySQL5Dialect ]”中看到空白 【参考方案1】:

由于您的错误消息末尾包含可疑的额外空间:

Unable to resolve name [org.hibernate.dialect.MySQL5Dialect ]

我会大胆猜测您的方言属性末尾有一个额外的空格。

所以寻找

"org.hibernate.dialect.MySQL5Dialect "

并将其更改为:

"org.hibernate.dialect.MySQL5Dialect"

【讨论】:

是的,你是对的,不知道这可能是错误的根源:)。很高兴知道这一点 最常见的错误通常是使用尚未添加到特定休眠版本的方言,或者是有趣的拼写错误,主要是大写/小写字母错误。 我怎么会遇到同样的问题?哎呀,我们有 38 个人做到了。疯了!【参考方案2】:

谢谢!我也有同样的额外空间问题。只是我们必须确保,每当我们点击 app.properties 文件中的不同行时,光标应该在末尾,就在 MySQL8Dialect 的字母 t 旁边。将 key spring.jpa.properties.hibernate.dialect 的值括起来使用“”引号,然后将其删除,这样我就必须解决问题,因为光标不是紧跟在字母 t 之后。

【讨论】:

请改写一下,使这个答案更明显,而不是对您自己的问题的描述。

以上是关于无法将名称 [org.hibernate.dialect.MySQL5Dialect] 解析为策略 [org.hibernate.dialect.Dialect]的主要内容,如果未能解决你的问题,请参考以下文章

XSD:无法将名称“类型”解析为(n)“类型定义”组件

无法将数组名称传递到 Swift 3 中的表视图中

无法将任务“X”添加为具有该名称的任务已存在

无法将任务“包装器”添加为具有该名称的任务已存在

无法将 git 分支重命名为“master”,以错误的名称推送到远程

SAXParseException; src-resolve:无法将名称“...”解析为(n)“类型定义”组件