0

一部の C++ コードを Java に移植する過程で、in/out パラメーターを使用してストアド プロシージャを呼び出す必要があります。この手順を変更できないため (たとえば、hibernate と em.createNativeQuery を操作するため)、基になる jdbc 接続を取得するには、EntityManager から hibernate セッションをアンラップする必要があると思います。

私の質問は、この接続が EJB コンテナー (JBoss AS 7.1) によって開始されたコンテナー管理トランザクションに参加するか、またはこの場合手動でトランザクションを管理する必要があるかということです。

4

1 に答える 1

0

Hibernate セッション/EntityManager に関連付けられた接続は、現在のトランザクション コンテキストに関連付けられています。コンテナはすでに JTA トランザクションを開始しているので (ここではそうであると仮定します)、手動でトランザクションを管理する必要はありません。

ただし、管理しなければならない別の問題があります。トランザクション レベルのキャッシュと、他のキャッシュとのキャッシュの同期です。ストアド プロシージャの呼び出しによってデータベースが更新され、キャッシュが古くなる場合は、その内容を消去する必要があります。特定のエントリのみを消去する必要がある場合もあれば、キャッシュ全体を消去する必要がある場合もあります。これはすべて、どのタイプのエントリが古くなったかによって異なります。

于 2012-11-09T09:02:15.640 に答える