运行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是每个教室中的学生数量。
有人能解释一下如何解决这个问题吗?KODO在执行查询以检索教室对象并在每个学生对象的_classroom字段中设置它们时,已经拥有了原始的教室对象。因此,我希望KODO只需相应地在每个学生对象的_classroom字段中设置这些对象,而不会返回到数据库。
再说一次,文档非常缺乏,但从我所读的内容来看,它应该能够更有效地完成这项工作。
注意-- EAGER_FETCH.PARALLEL是打开的,我试过打开和关闭缓存(查询和数据缓存),结果查询没有区别。
发布于 2010-04-24 03:01:05
在这方面与Oracle支持一起工作--这是Kodo 4.2 (最新版本)中的一个缺陷。修复方法是从jdo元数据文件中为处于一对一关系中的字段完全删除default-fetch-group属性(而不仅仅是将其设置为true或false)。因此,在上面的示例中,您将删除Student._classroom字段的default-fetch-group属性。
https://stackoverflow.com/questions/2641239
复制相似问题