2012-07-05 51 views

回答

0

您使用的是JPA提供程序?

如果您使用EclipseLink及其连接池,它应该在失败后自动检测到死连接,然后在新连接上重试执行查询。

否则,根据您使用的是什么DataSource或连接池,您可以启用连接测试以确保连接在使用前有效(尽管这确实会增加开销)。

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

+0

我正在使用Hibernate JPA提供程序。我怎样才能捕获JPA异常?以及我如何启用连接测试检查连接是否有效? – 2012-07-06 01:36:49

0

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

例子:

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

您可以使用c3p0 connection pool其中有选项来检查连接之前使用它。

+0

我没有得到数据库连接失败后的会话,所以我怎么会发现异常 – 2012-07-06 05:58:20

+0

因此,首先确保您的连接汇集和测试。如果在启动或提交事务时发生连接失败,您将得到org.hibernate.TransactionException。 – 2012-07-06 06:07:03