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