このSpringにおけるDAO(Data Access Object)のサポートは、JDBC、Hibernate、あるいは標準化された方法のJDOのようなデータアクセス技術を簡単に使えるようにすることを第1の目標とする。これによりこれらの技術の間での差し替えが簡単になり、また各技術に特有の例外をキャッチする心配をしなくていいようにすることができる。
Springでは、SQLException
のような各テクノロジ独自の例外から、ルート例外としてDataAccessException
をもつ独自の例外ヒエラルキーへの便利な変換が用意されている。この例外は元の例外をラッピングするので、何が間違ったのかといった情報を失うリスクは生じない。
JDBCの例外に加えて、SpringではHibernateの例外もラッピングし、プロプライエタリで検査済み例外から抽象化された実行時例外の集合へ変換することができる。またJDO例外についても同様だ。これにより、回復不可能で適切なレイヤでしか扱えないほとんどの永続化に関する例外をcatches/throwsや例外の宣言のいやな決まり文句に煩わされることなくハンドリングすることができるようになる。今までどおり、必要となるいかなるところででも例外をトラップし、ハンドリングすることができる。上述したように、JDBC例外(特定のDB用方言も含む)も、同じヒエラルキーに変換され、つまり一貫したプログラミングモデルにのっとりでJDBCで操作を実行できるということである。
上述したものは、ORMアクセスフレームワークのテンプレート版にも当てはまる。もしInterceptor
ベースのクラスを使えば、SessionFactoryUtils
のconvertHibernateAccessException
メソッドやconvertJdoAccessException
メソッドそれぞれへ委譲することによりアプリケーション自体がHibernateException
やJDOException
の処理に注意を払わなければならない。これらのメソッドはここで挙げた例外をorg.springframework.dao
例外ヒエラルキーと互換性のある例外への変換を行う。JDOExceptionは未検査なので、例外の観点からは汎用DAO抽象化が犠牲になるが、単に投げることもできる。
このSpringが用いる例外ヒエラルキーの概要は下記のダイアグラムのようになる。
JDBCやJDO、Hibernateのような様々なデータアクセステクノロジを一貫した方法で簡単に使えるようにするために、Springでは拡張可能な抽象DAOクラス群を提供している。このアブストラクトクラスにはデータソースや使っているテクノロジに特化した設定を行うメソッドがある。
Daoをサポートするクラスには下記のものがある。
JdbcDaoSupport
- JDBCデータアクセスオブジェクト用スーパクラスである。DataSource
が設定されている必要があり、これをベースとするJdbcTemplate
がサブクラスとして提供されている
HibernateDaoSupport
- Hibernateデータアクセスオブジェクト用スーパクラス。SessionFactory
が設定されている必要があり、これをベースとするHibernateTemplate
がサブクラスとして提供されている。SessionFactory
やフラッシュモード、例外の変換などに似た後者の設定を再利用するためにHibernateTemplate
により直接初期化するかどうかを選択することができる。
JdoDaoSupport
- JDOデータアクセスオブジェクト用スーパクラス。PersistenceManagerFactory
が設定されている必要があり、これをベースとするJdoTemplate
がサブクラスとして提供されている。