MS SQL 2008 に親テーブルと子テーブルがあり、カスケードを有効にして休止状態を使用して保存呼び出しを実行しようとしています。重要なテーブル仕様: 親テーブルには ID 列があり、子テーブルには長さ 50 の varchar 列があります。
環境: spring、jboss 7.1.1、hibernate 3、jta トランザクション (jndi からトランザクションを取得することにより、コードからトランザクションが開始/コミット/ロールバックされます)
問題が発生する場合: 子テーブルの varchar 列に挿入するデータが 50 を超えています。
子テーブルの挿入クエリは、コミットを実行したときにのみ発生し、文字の長さが原因で挿入に失敗します。これが原因で例外が発生します。例外をキャッチしてロールバックを実行します。トランザクションが非アクティブな状態であるため、ロールバックは失敗します。
問題: ここでの問題は、親データがコミットされていることです。これは私が望んでいるものではありません。トランザクションが完全にロールバックされたことを確認するにはどうすればよいですか?