DataAccessExceptionのマッピング変更

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で確認しました。