Spring+Hibernate連携時の主なExceptionまとめ

HibernateをSpringで動かすと、Hibernateで発生したExceptionをSpringが変換して投げてくれる。


Hibernate

  • PK検索でデータが存在しなかった場合
  • 登録、更新時に一意制約違反がおきた場合
    • org.hibernate.exception.ConstraintViolationException
  • 更新、削除時に楽観的ロック例外が発生した場合、または対象データが存在しなかった場合


上記のExceptionが以下のExceptionに変換される。


Spring

  • PK検索でデータが存在しなかった場合
    • org.springframework.orm.hibernate3.HibernateObjectRetrievalFailureException
  • 登録、更新時に一意制約違反がおきた場合
    • org.springframework.dao.DataIntegrityViolationException
  • 更新、削除時に楽観的ロック例外が発生した場合、または対象データが存在しなかった場合
    • org.springframework.orm.hibernate3.HibernateOptimisticLockingFailureException


以下のように親クラスで捕らえれば、Hibernate以外の各種ORマッパーの例外も統一して扱うことができる。


SpringでHibernateだけに依存しないで捕らえる型

  • PK検索でデータが存在しなかった場合
    • org.springframework.dao.DataRetrievalFailureException
  • 登録、更新時に一意制約違反がおきた場合
    • org.springframework.dao.DataIntegrityViolationException
  • 更新、削除時に楽観的ロック例外が発生した場合、または対象データが存在しなかった場合
    • org.springframework.dao.OptimisticLockingFailureException


上記すべてRuntimeExceptionです。
try〜catch、throwsが必要なExceptionは、近頃流行らないのでしょうか?
C#にもRuntimeExceptionしかないみたいだし。