如何修复“ org.hibernate.boot.registry.selector.spi.StrategySelectionException:无法解析名称[org.hibernate.dialect.MySQL8Dialect]”?

时间:2019-05-05 10:32:14

标签: java mysql hibernate mysql-8.0

启动应用程序时收到异常:

Caused by: org.hibernate.boot.registry.selector.spi.StrategySelectionException: Unable to resolve name [org.hibernate.dialect.MySQL8Dialect] as strategy [org.hibernate.dialect.Dialect]
at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.selectStrategyImplementor(StrategySelectorImpl.java:126)

我正在使用MySQL 8.0。

pom.xml:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.2.12.Final</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.15</version>
</dependency>

hibernate.cfg.xml:

    <property name="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost/botdb?serverTimezone=UTC</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">password</property>
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.hbm2ddl.auto">update</property>
    <property name="hibernate.connection.useSSL">false</property>
    <property name="hibernate.enable_lazy_load_no_trans">true</property>

1 个答案:

答案 0 :(得分:0)

根据pom.xml,您当前正在使用Hibernate 5.2.12。从5.2 Javadocs可以看到它没有MySQL8Dialect

MySQL8Dialect是在Hibernate 5.3中引入的(请参见Javadoc)。可以通过将Hibernate更新为5.35.4来解决问题。

如果无法更新Hibernate,则必须创建自定义方言。就像将MySQL8Dialect.java从较新版本复制到您的代码库并从persistence.xml引用它一样容易。可能需要进行细微的修改。