永続層にはhiberante、c3p0、postgresqlを使用しています。データ集約型のジョブ(主に選択/挿入)を実行しているときに、開発者の1人がコミットする前にentityManager.flush()を使用することにしました。
entityManager.getTransaction().begin()
insert n elements
entityManager.flush()
entityManager.getTransaction().commit()
しばらくすると、データ集約型のジョブを実行しているすべてのスレッドがブロックされたように見え、プールからのデータベース接続を待機していることがわかりました。「Idleintransaction」状態にあるプール上のすべての接続。状況は毎回繰り返される可能性があります。
flush()を削除した後、状況は消えました。
なぜこれが起こるのか誰かが知っていますか?
ありがとう