Java 为什么我们在hibernate中捕获异常类?

Java 为什么我们在hibernate中捕获异常类?,java,hibernate,exception,Java,Hibernate,Exception,如果这个类包含错误(如java虚拟机异常)或异常(如NullPointerException),为什么我们必须在catch中使用Exception…这些异常都是未检查的异常。我在网上找到了一些例子,但我不明白为什么在这段代码中必须使用Exception。为什么我们不捕获绑定到hibernate框架的异常 试试看{ Session Session=sessionFactory.getCurrentSession(); 标准=session.createCriteria(Student.class)

如果这个类包含错误(如java虚拟机异常)或异常(如NullPointerException),为什么我们必须在catch中使用Exception…这些异常都是未检查的异常。我在网上找到了一些例子,但我不明白为什么在这段代码中必须使用Exception。为什么我们不捕获绑定到hibernate框架的异常

试试看{
Session Session=sessionFactory.getCurrentSession();
标准=session.createCriteria(Student.class);
标准.添加(限制.eq(“pk.stud.id”,idStude));
carte=(List)criteria.List();
}捕获(例外e){
System.out.println(“\n”+e.toString()+”+e.getMessage()+“\n”);
}
System.out.println(“\nENTER UnivDAO\n”);

您的
hibernate
代码正在访问数据库,可以更新/删除/锁定记录

如果您的代码将抛出
未经检查的异常
而不捕获,则数据库连接可能会保持打开状态,并可能导致连接泄漏,甚至锁定数据库记录


此外,您可能有一个高级函数中的catch,该函数可能以错误的方式处理此类异常,例如,期望某些不同的参数为null。关键是此类代码可能会抛出一整套不同的已检查异常类型

API的作者没有要求您捕获这5种不同的异常,而是决定将操作简化为“抛出异常”。这减少了双方的工作量——现在掷骰子列表更容易管理。但不利的一面是,你失去了一些关于真正发生了什么的信息


这是一种常见的做法。有时这是个好主意,有时不是

不需要捕获该代码周围的任何异常。许多示例捕获异常只是为了演示抛出了哪些异常。该示例可能会在try/catch块之后将
carte
设置为
null
,或留下一个空列表,这只会导致抛出更多异常,或返回无效结果。相反,应该抛出异常,并在更高的级别上处理,可能是在请求级别

如果查询结果不可用,那么不管是因为数据库关闭还是编程错误。反应通常是相同的。将向用户发送错误消息,或使用默认值。将记录错误,然后继续下一个请求


同样在本例中,调用
System.out
e.getMessage()
意味着我们丢失了大量有关异常发生的位置或时间的信息。它并不用于实际代码,而是应该将异常发送到记录器。

这取决于。。如果数据库关闭了怎么办?若数据库存在临时问题怎么办?如果您添加的条件无效怎么办?SQLException是需要处理的异常。
try{
          Session session = sessionFactory.getCurrentSession();
          Criteria criteria = session.createCriteria(Student.class);
          criteria.add(Restrictions.eq("pk.stud.id",idStude));
          carte = (List<StudentC>) criteria.list();
      }catch(Exception e){
          System.out.println("\n"+e.toString()+" "+e.getMessage()+"\n");
      }
      System.out.println("\nENTER UnivDAO \n");