1

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 或类似的东西时使用 Hibernate。因此,每个 Web 请求都会启动一个新线程,如果该线程终止,它只会影响该一个 Web 请求。但是对于一个独立的Java应用程序,我们应该如何处理呢?

4

3 回答 3

2

捕获 RuntimeException 并没有错。未选中它只是为了让您选择不选中。

如果您有处理异常的特定策略(例如重试,或触发应用程序逻辑中的其他内容),请务必抓住它!

于 2012-05-23T03:31:29.870 回答
1

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

如果您的案例您应该处理 (Catch)PersistenceException并采取纠正措施通知您的用户发生了不好的事情。

正如其他答案在一般说明中所强调的那样,捕捉RuntimeException和采取纠正措施没有害处,通常也建议投掷RuntimeException而不是CheckedException

于 2012-05-23T03:39:44.137 回答
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 节。

于 2012-06-05T12:14:17.330 回答