3

クライアント アプリから、2 つのメソッドを 2 回呼び出すのではなく、1 つの EJB メソッドで store と refresh を呼び出したいと考えています。EJB メソッドを作成し、他の 2 つの EJB メソッドを呼び出すようにしました。これは次のように単純に見えます。

 public ZippedObjectWrapper saveAndRefresh(final Item p_item) {
    Long itemSavedId= save(p_item);
    return refresh(itemSavedId);
  }

問題は、データを読み取らせない Toplink であり、更新部分で例外がスローされます。

例外 [TOPLINK-7123] 例外の説明: この UnitOfWork で writeChanges() が正常に呼び出されました。コミット プロセスは開始されましたが、まだ終了していないため、現在サポートされている操作は、コミット、commitAndResume、リリース、非オブジェクト レベルのクエリ、または SQLCall の実行のみです。現在、executeQuery(ObjectLevelReadQuery) 操作は許可されていません。

助言がありますか?

編集: メソッドのシグネチャを変更しました。

4

2 に答える 2

1

save() メソッドが何をするのかわかりませんが、 UnitOfWork で writeChanges() を呼び出していると思います。お使いのバージョンでは writeChanges() の後にクエリを実行できませんでした。writeChanges() を削除すると、問題が解決するはずです。

EclipseLink および JPA にアップグレードすると、トランザクションで flush() を複数回使用し、その後にクエリを実行できます。UnitOfWork の代わりに RepeatableWriteUnitOfWork を手動で使用して、writeChanges() への複数の呼び出しを有効にし、クエリを許可することもできます。

于 2011-04-07T13:36:51.050 に答える