Hibernate NullPOinter /无法创建到服务器的连接



我正试图了解Hibernate,但我现在在这里坐了几个小时,我无法找到解决方案。这:https://www.codejava.net/frameworks/hibernate/hibernate-hello-world-tutorial-for-beginners-with-eclipse-and-mysql是我的教程我正在使用IntelliJ

我能够通过数据源连接到MySQL并操作数据库。

<session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/bookstore?serverTimezone=UTC</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="show_sql">true</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<mapping class="codejava.Book" />
</session-factory>

这里它总是进入catch块。

protected void setup(){
final StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
.configure() // configures settings from hibernate.cfg.xml
.build();
try {
sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
} catch (Exception ex) {
StandardServiceRegistryBuilder.destroy(registry);
}
}

错误:

WARN: SQL Error: 0, SQLState: 08001
Aug. 15, 2021 7:31:07 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: Could not create connection to database server.
Aug. 15, 2021 7:31:07 PM org.hibernate.service.internal.AbstractServiceRegistryImpl stopService
INFO: HHH000369: Error stopping service [class org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl]
java.lang.NullPointerException
at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.stop(DriverManagerConnectionProviderImpl.java:207)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.stopService(AbstractServiceRegistryImpl.java:390)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.destroy(AbstractServiceRegistryImpl.java:373)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.destroy(StandardServiceRegistryImpl.java:129)
at org.hibernate.boot.registry.StandardServiceRegistryBuilder.destroy(StandardServiceRegistryBuilder.java:389)
at codejava.BookManager.setup(BookManager.java:22)
at codejava.BookManager.main(BookManager.java:93)
Exception in thread "main" java.lang.RuntimeException: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
at codejava.BookManager.setup(BookManager.java:23)
at codejava.BookManager.main(BookManager.java:93)

我现在已经玩了这么多,但我无法找到原因。根据其他问题?serverTimezone应该是解决方案,但显然它只改变了我得到的错误类型。

请帮助。

很可能你安装了一个新的基于mysql 8的数据库,它与你的数据库驱动程序和hibernate版本不兼容。

我可以在我的本地复制相同的错误,并可以通过更新hibernate-core到5.5.6来解决它。Final(然后包含MySQL8Dialect)和mysql-connector-java到主pom.xml文件中的8.0.26:

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

我还必须在

中切换方言
<property name="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</property>

最新更新