0

如何使用 Hibernate 捕获数据库通信失败?,在运行应用程序时,如果存在 DB 连接,那么我得到了 entitymanager,否则我没有从 spring 容器中获取 entitymanager。如何获取连接是打开还是关闭

4

2 回答 2

0

一般来说,您应该使用说org.hibernate.SessionFactory对象和方法getCurrentSession()openSession(). 一旦你拥有 Session 对象,它实际上是你的实例,你可以使用方法org.hibernate.impl.SessionImpl获取 Connection 对象。connection()

例子:

((SessionImpl)sessionFactory.getCurrentSession()).connection().isClosed();

您可以使用c3p0 连接池 ,该连接池具有在使用前检查连接的选项。

于 2012-07-06T05:45:45.340 回答
0

您使用的是哪个 JPA 提供程序?

如果您使用的是带有连接池的 EclipseLink,它应该在失败后自动检测死连接并重试在新连接上执行查询。

否则,根据您使用的数据源或连接池,您可以启用连接测试以确保连接在使用前有效(但这确实会增加开销)。

您还可以捕获 JPA 异常并重试您的 JPA 事务。

于 2012-07-05T13:27:35.430 回答