0

KODO 4.2 を実行すると、KODO によって非効率的なクエリが生成されるという問題が発生します。これは、コレクションが最初のオブジェクトへの双方向関係を持つコレクションを含むオブジェクトをフェッチするときに発生します。

Class Classroom
{
     List<Student> _students; 
}

Class Student
{
     Classroom _classroom;
}

次のフェッチ プランを設定して、クラスルームとそれに対応する生徒のリストを取得するフェッチ プランを作成するとします。

fetchPlan.addField(Classroom.class,”_students”);

これにより、2 つのクエリが発生します (教室を取得してから、それらの教室にいるすべての生徒を取得します)。

ただし、fetchPlan.addField(Student.class, “_classroom”) を実行して _classroom フィールドに入力するために、フェッチ プランに教室への参照を含めると、X 個の追加クエリが発生します。各教室の生徒数です。

誰でもこれを修正する方法を説明できますか? KODO は、クエリを実行して Classroom オブジェクトを取得し、それらを各 Student オブジェクトの _classroom フィールドに設定する時点で、元の Classroom オブジェクトを既に持っています。したがって、KODO は単に各 Student オブジェクトの _classroom フィールドにこれらのオブジェクトを設定し、データベースに戻らないことを期待します。

繰り返しになりますが、ドキュメントはひどく不足していますが、私が読んだことから、これをより効率的に行うことができるはずです.

注-- EAGER_FETCH.PARALLEL がオンになっており、キャッシュ (クエリおよびデータ キャッシュ) をオンまたはオフにしてこれを試しましたが、結果のクエリに違いはありません。

4

1 に答える 1

0

これについてOracleサポートと協力しました-これはKodo4.2(最新バージョン)の欠陥です。修正は、双方向関係の1対1側にあるフィールドのjdoメタデータファイルからdefault-fetch-group属性を完全に(trueまたはfalseに設定しないでください)削除することです。したがって、上記の例では、Student._classroomフィールドのdefault-fetch-group属性を削除します。

于 2010-04-23T19:01:05.480 に答える