GeekFactory

int128.hatenablog.com

doma-spring-bootのSQL例外変換

doma-spring-bootを利用すると、Doma2の例外クラス(JdbcException)をSpring Transactionの例外クラス(DataAccessException)に変換してくれます。例外変換の仕様が明文化されていないようなので調べてみました。どこかにまとめてあったら教えてください。

前提

  • doma-spring-boot-1.1

例外変換の仕様

契機 Doma2の例外クラス → Spring Transactionの例外クラス
楽観的排他制御エラー OptimisticLockExceptionOptimisticLockingFailureException
一意制約違反 UniqueConstraintExceptionDuplicateKeyException
1件であることを期待する検索系SQLの結果が2件以上である場合 NonUniqueResultExceptionIncorrectResultSizeDataAccessException
1列であることを期待する検索系SQLの結果が1列でない場合 NonSingleColumnExceptionIncorrectResultSizeDataAccessException
1件以上存在することを期待する検索系SQLの結果が0件である場合 NoResultExceptionEmptyResultDataAccessException
結果セットに未知のカラムが存在する場合 UnknownColumnExceptionTypeMismatchDataAccessException
結果セットのカラムにマッピングされないプロパティが存在する場合 ResultMappingExceptionTypeMismatchDataAccessException
その他のSQL例外 JdbcExceptionSQLExceptionTranslator により変換される
その他の例外 JdbcExceptionUncategorizedDataAccessException

なお、例外変換はapplication.ymlで以下を設定すると無効化できます。

# Whether convert JdbcException into DataAccessException.
doma.exception-translation-enabled: false

共通例外処理を実装する場合などに役に立てば幸いです。

参考資料