1

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)また、このテスト ケースの最初にアクションを含めたにもかかわらず、このテストの最後にアクションをロールバックできないことがわかりました。

ありがとう

4

1 に答える 1