如何使用 Hibernate 捕获数据库通信失败?,在运行应用程序时,如果存在 DB 连接,那么我得到了 entitymanager,否则我没有从 spring 容器中获取 entitymanager。如何获取连接是打开还是关闭
问问题
1228 次
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 回答