JUnit で Hibernate を Spring と一緒に使用して統合を行いました。複数の読み取りと書き込みを使用して、コードが同時実行を正しく処理しているかどうかをテストしています。Hibernate の問題は、それをシミュレートするために複数のスレッドを単独で使用できないことです。Hibernate は、DAO にバインドされたアクティブな Hibernate セッションがないと不平を言いました。それで、それを機能させるために私がしたことは、ThreadのHibernateのTransactionTemplate内でDAOのメソッドを実行することでした。
Thread alpha = new Thread(new Runnable() {
@Override
public void run() {
TransactionTemplate tt = new TransactionTemplate(tm);
tt.execute(new TransactionCallbackWithoutResult() {
@Override
public void doInTransactionWithoutResult(TransactionStatus status) {
Address address =addrDao.findBy("John Doe");
address.setZipCode("12345");
addrDao.update(address);
}
});
}
});
別のスレッド、ベータ版を作成し、同じ内容で追加の時間遅延を設定します。最後に、両方のスレッドを開始します。
alpha.start();
beta.start();
出来た。私の質問は、Spring + Hibernate + Junit セットアップで TransactionTemplate(...) を使用する以外に、これを行うためのより良い方法はありますか?
@TransactionConfiguration(defaultRollback = true)
また、このテスト ケースの最初にアクションを含めたにもかかわらず、このテストの最後にアクションをロールバックできないことがわかりました。
ありがとう