【DbUnit】DB跨ぎの外部キーが絡む状態でDatabseSetup時にLock wait timeout exceeded; try restarting transactionになる問題への対処【Spring】

TL;DR

  • DB跨ぎの外部キーが絡む状態でDatabseSetupすると、外部キーの元になるinsertがコミットされずにデッドロックが発生する
    • エラーメッセージはCaused by: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transactionになる
  • 外部キー制約を切ることでこの問題を回避できる

起きた問題

タイトル通り、DB跨ぎの外部キーが絡む状態でDatabseSetupした所、外部キーの元になるinsertがコミットされずにデッドロックが発生する状態になりました。

対処

色々調べましたが、DbUnit側でこれに対応する方法は提供されていないように見えました。

そのため、テストでは外部キー制約を切ることでこの問題に対処しました(外部キー制約によるテストデータ作成の手間を軽減する意図も有りました)。

外部キー制約の切り方は別の記事にまとめてあります。

qiita.com