0

実際、ストアドプロシージャを呼び出して、同じトランザクションでデータベースにいくつかの変更を加えるという問題に直面しています。私がやっていることは、jpqlを使用してen EJB(3.0)からいくつかのデータをOracleデータベースに挿入し、ネイティブのjpaクエリでストアドプロシージャを呼び出して、新しいデータで処理を行うことです。しかし、問題は、トランザクションをコミットしない限り、PL / SQL関数が変更を認識しないことです。また、すべての変更を同じトランザクションに保持したいので、やりたくないことを呼び出します。したがって、問題は次のとおりです。データを挿入し、pl / sql関数を呼び出して、その後すべてをコミットする(または最終的にすべての変更をロールバックする)方法はありますか?

ご協力ありがとうございました

4

1 に答える 1

0

entityManager.flush()ストアドプロシージャを実行する前に、必ず呼び出してください。それ以外の場合、永続コンテキストにはまだメモリ内の保留中の変更がある可能性があります。フラッシュにより、保留中のすべての変更がデータベースに書き込まれるようになります。

それが機能しない場合は、ストアドプロシージャがJPAで使用されているトランザクションとは異なるトランザクションを使用していることを意味します。

于 2012-07-25T13:57:36.807 に答える