0

运行 KODO 4.2 并遇到 KODO 生成的低效查询问题。当获取包含集合的对象时会发生这种情况,其中该集合与第一个对象具有双向关系。

Class Classroom
{
     List<Student> _students; 
}

Class Student
{
     Classroom _classroom;
}

如果我们通过设置以下获取计划来创建获取计划以获取教室及其对应学生的列表:

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

这将导致两个查询(获取教室,然后获取这些教室中的所有学生),这是我们所期望的。

但是,如果我们在获取计划中包含对教室的引用,以便通过执行 fetchPlan.addField(Student.class, “_classroom”) 填充 _classroom 字段,这将导致 X 数量的附加查询,其中 X是每个教室的学生人数。

谁能解释如何解决这个问题?在执行查询以检索 Classroom 对象并将它们设置在每个 Student 对象的 _classroom 字段中时,KODO 已经拥有原始 Classroom 对象。因此,我希望 KODO 相应地在每个 Student 对象的 _classroom 字段中简单地设置这些对象,而不是返回数据库。

再一次,文档非常缺乏,但从我读过的内容来看,它应该能够更有效地做到这一点。

注意-- EAGER_FETCH.PARALLEL 已打开,我已经尝试过打开和关闭缓存(查询和数据缓存),结果查询没有区别。

4

1 回答 1

0

与 Oracle Support 合作——这是 Kodo 4.2(最新版本)中的一个缺陷。修复是从 jdo 元数据文件中为双向关系的一对一的字段完全取出 default-fetch-group 属性(不要只是将其设置为 true 或 false)。因此,在上面的示例中,您将取出 Student._classroom 字段的 default-fetch-group 属性。

于 2010-04-23T19:01:05.480 回答