0

JavaでHibernate/JPA単体テストをバックアップするために組み込みHSQLDBを使用するセットアップがあり、テスト実行後にデータベースを破棄するだけなので、インメモリデータベースモードを使用しています。私の問題は、制約違反が原因でテストの1つが失敗し、HSQLDBが列をSYS_CT_286としてリストし、ログに表示されるクエリが、実際のパラメーター値が何であるかを確認できないプリペアドステートメントであるということです(これらはに置き換えられます) '?')。私の質問は次のとおりです。

1-実際に実行されているSQLを確認する方法はありますか?(たとえば、mysqlクエリログのように?)。

2- SYS_CT_286とは正確には何ですか?それは私の列の1つではありません、それは生成された列ですか?それで間違っているかもしれない明らかな何かがありますか?

ありがとう。

4

2 に答える 2

1

HSQLDBは​​REDOログを保持します。これは、実行されたSQLのデバッグに役立つ可能性がありますが、メモリ内データベースに対してこれを行うかどうかはわかりません。データベースを一時的にtestという名前のファイルベースのdbに変更する場合、REDOログの名前はtest.logにする必要がありますが、クリーンシャットダウンすると消えます。

SYS_CT_286は、システムで生成された名前の制約である可能性があります。繰り返しになりますが、ファイルベースのDBを作成すると、それを調べて、それが何の制約であるかを見つけることができる場合があります。また、定義している制約である場合は、適切な名前が付けられるようにマッピングを変更できる場合もあります。とにかく、外部キー制約を使用してこれを実行できることを私は知っています。

于 2010-03-29T23:00:19.450 に答える
1

実際に実行されているSQLを確認する方法はありますか?

HSQLDBが実行中のSQLステートメント(selectなど)をログに記録できるかどうかはわかりませんが、これにはP6SpyなどのプロキシJDBCドライバーを使用できます(この回答ですでに説明しています)。

SYS_CT_286とは正確には何ですか?

これは制約です(そして私はユニークな制約に賭けます)。

于 2010-03-29T23:05:39.067 に答える