运行KODO 4.2并且由KODO生成一个低效查询问题。当获取包含集合的对象时会发生这种情况,该集合中该集合具有返回到第一个对象的bidrectional关系。
Class Classroom
{
List<Student> _students;
}
Class Student
{
Classroom _classroom;
}
如果我们通过设置以下获取计划来创建获取计划以获取课堂列表及其相应的学生:
fetchPlan.addField(Classroom.class,” _学生”);
这将导致两个查询(获得教室,然后让所有教室中的学生),这是我们所期望的。
但是,如果我们在fetch计划中将引用包含回教室,以便通过执行fetchPlan.addField(Student.class,“_ classlass”)来填充_classroom字段,这将导致X数量的额外查询其中X是每个教室的学生人数。
任何人都可以解释如何解决这个问题吗? KODO已经拥有原始的Classroom对象,它正在执行查询以检索Classroom对象并在每个Student对象的_classroom字段中设置它们。所以我希望KODO能够相应地在每个Student对象的_classroom字段中设置这些对象,而不是回到数据库。
再一次,文档非常缺乏,但根据我的阅读,它应该能够更有效地完成这项工作。
注意 - EAGER_FETCH.PARALLEL已打开,我尝试打开和关闭缓存(查询和数据缓存),结果查询没有区别。
答案 0 :(得分:0)
在这方面与Oracle支持部门合作 - 这是Kodo 4.2(最新版本)中的一个缺陷。修复是从jdo元数据文件中取出双向关系一对一的字段的default-fetch-group属性COMPLETELY(不要只是将其设置为true或false)。因此,在上面的示例中,您将取出Student._classroom字段的default-fetch-group属性。