2

OfBiz で単純な Join を使用して、db からいくつかのデータを取得しようとしています。controller.xmlから呼び出される.javaメソッドに配置されたコードを次に示します。

DynamicViewEntity dve = new DynamicViewEntity();
dve.addMemberEntity("PR", "Product");
dve.addAliasAll("PR", "productName");
dve.addAliasAll("PR", "description");
dve.addRelation("one", "", "ProductAttribute", ModelKeyMap .makeKeyMapList("productId"));
dve.addMemberEntity("PA", "ProductAttribute");
dve.addAlias("PA", "attrName");

// Selected Rows
List selectedFields = UtilMisc.toList("productName", "description");

// Condition
List conditionList = UtilMisc.toList(new EntityExpr("attrName", EntityOperator.LIKE, attr), new EntityExpr("productName", EntityOperator.LIKE, key));
EntityConditionList condition = new EntityConditionList(conditionList, EntityOperator.AND);

EntityListIterator eli = delegator.findListIteratorByCondition(dve, condition, null, selectedFields, null, null);
List result = eli.getPartialList(0, 10);
eli.close();

それを実行すると、これは私が受け取っている例外です:

トランザクションが設定されていない EntityListIterator を返す検索は実行できません。この呼び出しをトランザクションでラップします。

さらに調査したところ、次のことがわかりました。

デフォルトでは、service-multi は 1 つの大きなトランザクションをすべてのサービスにラップし、タイムアウトをサービスの _rowCount トランザクション タイムアウトに設定します。すべてのサービス呼び出しを 1 つのトランザクションにまとめたくない場合は、invoke="" の後に global-transaction="false" パラメータを使用します。

したがって、何も指定していない場合は、サービスにトランザクションがラップされている必要があることを理解しています。私は何が欠けていますか?

4

1 に答える 1

1

このコードをサービスにラップしていますか? コントローラーから呼び出していないことを確認してください

于 2013-02-28T09:24:23.723 に答える