GNR

アクセスカウンタ

zoom RSS Spring DataAccessExceptionのマッピング変更

<<   作成日時 : 2008/06/04 00:38   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

Springを利用したDBへのアクセスでSQLExceptionはDataAccessExceptionの継承クラスに変換されます。

この変換には「sql-error-codes.xml」で定義された情報で、変換されるクラスが決定されます。
このXMLファイルは、springのjarファイル内の「org.springframework.jdbc.suport」に存在します。
自分用にカスタマイズしたい場合は、このファイルを編集して、クラスパスの通っているディレクトリの
直下に配置することでオーバーライドすることが可能となっています。

さらに自分で作成したDataAccessExceptionの継承クラスに変換したい場合は、以下のように定義します。
ここで定義できるのは、DataAccessExceptionの継承クラスしか定義できません。
#PostgreSQLをサンプルに
<bean id="PostgreSQL" class="org.springframework.jdbc.support.SQLErrorCodes">
<property name="useSqlStateForTranslation">
<value>true</value>
</property>
<property name="badSqlGrammarCodes">
<value>03000,42000,42601,42602,42622,42804,42P01</value>
</property>
<property name="dataAccessResourceFailureCodes">
<value>53000,53100,53200,53300</value>
</property>
<property name="dataIntegrityViolationCodes">
<value>23000,23502,23514</value>
</property>
<property name="cannotAcquireLockCodes">
<value>55P03</value>
</property>
<property name="cannotSerializeTransactionCodes">
<value>40001</value>
</property>
<property name="deadlockLoserCodes">
<value>40P01</value>
</property>
<property name="customTranslations">
<list>
<!-- ここから -- >
<bean class="org.springframework.jdbc.support.CustomSQLErrorCodesTranslation">
<!-- 対応するSQL例外のエラーコード -->
<property name="errorCodes" value="23503" />
<!-- 変換する例外クラス -->
<property name="exceptionClass" value="jdbc.ForeignKeyException" />
</bean>
<bean class="org.springframework.jdbc.support.CustomSQLErrorCodesTranslation">
<property name="errorCodes" value="23505" />
<property name="exceptionClass" value="jdbc.DuplicateKeyException" />
</bean>
<!-- ここまで -->
</list>
</property>
</bean>

ここで変換可能な例外以外もあるので注意ください。

※springframework2.5.4で動作確認


○課題
 Springではすべての例外を非検査例外として扱っているが、検査例外にしたい場合は、
 どうするのがよいのか。。。
 必要な分だけcatchして検査例外にする方法がベストなのかと思っているが、catchし忘れを
 どのようにすれば簡単にチェックできるのだろう?
 やっぱりテストしかないのかな!?
 実装者に依存するようなのは嫌だなぁ。。。。。。

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ
Spring DataAccessExceptionのマッピング変更 GNR/BIGLOBEウェブリブログ
文字サイズ:       閉じる