我看到一些Spring/Hibernate代碼在DAO接口方法中聲明DataAccessException
時有不同的策略。要聲明或不聲明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(很重要運行時)異常層次。
我不太確定這個策略,因爲通過讓這些運行時異常爬上堆棧,Spring會在事務級別捕獲它們(如果有的話),這將觸發回滾。 – JVerstry 2012-07-10 11:46:48
是的。如果彈簧容器是插入操作並且存在異常,則它應該回滾。但我仍然認爲向調用者拋出異常是至關重要的。如果您試圖說getFlights並且存在運行時異常,那麼調用此服務的應用程序會發現知道該列表是否有空是因爲出現異常而導致該列表爲空,而不是因爲該查詢沒有航班。 – rprab 2012-07-10 19:34:08