在DAO接口方法中声明或不声明DataAccessException?

时间:2012-07-09 09:39:24

标签: java spring exception dao

我看到一些Spring / Hibernate代码在DAO接口方法中声明DataAccessException时有不同的策略。

有些人明确声明了,有些则没有(或只是不时):

public interface FlightDao {

    boolean decrementSeat(Long flightId, int quantity);

    List<Flight> findFlights(String fromAirportCode, String toAirportCode) throws DataAccessException;

    public List<Flight> getFlights();

    Flight getFlight(Long id);

    Flight getFlight(String flightNumber);

    void save(Flight flight);

}

什么是最佳做法?为什么?

更新

spring tutorial的第13.2.2节开始,使用@Repository注释实现DAO pojo以确保底层ORM(或JDBC)异常自动转换为DataAccessException(运行时)异常层次结构非常重要。

2 个答案:

答案 0 :(得分:2)

正如你所看到的那样here,这是一个RuntimeException,所以你声明它或者没有在编程方面没有区别。当用户实现该方法时,他可以选择从方法签名中省略此异常。

我能想到把它放在方法签名中的唯一原因就是标记它,这样用户就会知道这个方法可能抛出这个异常,因此他可以选择抓住并处理它。

答案 1 :(得分:1)

如果在查找航班/获得航班/减少座位时存在任何异常,则调用这些“服务”方法的应用程序应该对如何处理这些异常有最终决定权。 FlightDAO作为一项服务应该只是捕获并抛出所有异常。您可能会发现创建新的用户定义的Exception很有用...将其命名为ServiceException或MyDAOException,并使FlightDAO中的所有方法抛出此用户定义的异常。