如何在独立Java应用程序中处理Hibernate异常

时间:2012-05-23 03:28:13

标签: java hibernate exception-handling

Hibernate抛出的异常是未经检查的,而且从我在其他地方读到的内容看起来似乎不应该被代码捕获。但是,这意味着当例如发生临时数据库错误时,发生它的线程将死亡,我们的应用程序将无响应。应该怎么做?

发生的例外情况:

javax.persistence.PersistenceException
Caused by: org.hibernate.exception.GenericJDBCException: could not insert
Caused by: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction

当应用程序运行数小时或数天时会发生这种情况。

我所阅读的大部分内容都谈到了如何在将Spring集成到Spring或类似的东西时使用Hibernate。因此,每个Web请求都会启动一个新线程,如果该线程死亡,它只会影响该一个Web请求。但是对于独立的Java应用程序,我们应该如何处理它呢?

3 个答案:

答案 0 :(得分:2)

捕获RuntimeException没有错。它未经检查只是为了让你不要选择。

如果你有一个特定的策略来处理异常(比如再次尝试,或者在app逻辑中触发其他东西),一定要抓住它!

答案 1 :(得分:1)

Hibernate Exceptions未经检查,因为它们不想强迫您捕获它们,如果您想在DAO或任何其他地方处理,则由应用程序的设计决定。

如果您的情况应该处理(Catch)PersistenceException,并采取纠正措施通知您的用户发生了一些不良事件。

正如其他一般性说明的答案所强调的那样,抓住RuntimeException并采取纠正措施没有任何害处,通常建议抛出RuntimeException而不是CheckedException

答案 2 :(得分:0)

如果您有一个独立的应用程序,您仍然可以使用Spring。在一天结束时,Spring只是一堆配置为加载和运行的java类。在中心,您有一个ApplicationContext对象,它只是applicationContext.xml文件的对象版本。

基本上,在“public static void main(String [] args)”中,您可以从xml文件创建ApplicationContext。请注意,ApplicationContext是一个接口,因此您可能会调用FileSystemXmlApplicationContext(String configLocation)的构造函数。

http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/context/support/FileSystemXmlApplicationContext.html#FileSystemXmlApplicationContext(java.lang.String

查看http://static.springsource.org/spring/docs/3.1.0.M1/spring-framework-reference/html/beans.html并详细了解第3.2节。