Java 先发制人地、优雅地检查org.hibernate.Session是否仍然连接(通过c3p0)

Java 先发制人地、优雅地检查org.hibernate.Session是否仍然连接(通过c3p0),java,hibernate,session,database-connection,c3p0,Java,Hibernate,Session,Database Connection,C3p0,我在一个多硬盘数据库环境中工作,在这个环境中,碎片的停机并不是致命的。当应用程序启动时,所有碎片信息都加载到缓存中并加载相应的对象,但是,预计在应用程序正常运行期间,一些碎片可能会下降,在这种情况下,应用程序会故障切换到剩余的碎片之一。这几乎是一个标准的用例场景 在某些情况下,我需要进行跨切分扫描,我这样做的方式是遍历上面描述的会话映射并检索数据。当我有一个与数据库的Hibernate会话时,问题就出现了,该会话自会话打开以来就一直关闭。我希望有一种先发制人的方法来检查数据库是否关闭,而不尝试事

我在一个多硬盘数据库环境中工作,在这个环境中,碎片的停机并不是致命的。当应用程序启动时,所有碎片信息都加载到缓存中并加载相应的对象,但是,预计在应用程序正常运行期间,一些碎片可能会下降,在这种情况下,应用程序会故障切换到剩余的碎片之一。这几乎是一个标准的用例场景

在某些情况下,我需要进行跨切分扫描,我这样做的方式是遍历上面描述的会话映射并检索数据。当我有一个与数据库的Hibernate会话时,问题就出现了,该会话自会话打开以来就一直关闭。我希望有一种先发制人的方法来检查数据库是否关闭,而不尝试事务并获取org.hibernate.exception.genericjdbception,这是我现在发现它的方式,但这是不好的,因为它是一个运行时异常,以及所有其他的弊病。我还尝试了Session.isOpen和Session.isconnected,但这两种方法即使在数据库关闭时也返回true


有没有一种方法可以先发制人、优雅地检查Hibernate会话的连接?类似于向数据库发送ping。另外,了解我们正在使用c3p0进行连接池也是值得的。是否有一种方法可以将其配置为告诉Hibernate连接已断开并关闭/断开关联的会话?

我认为唯一有效的方法是明确地称为方法会话。关闭这不是问题的答案。它更适合作为评论