Java KODO:如何设置双向关系的获取计划?
运行KODO 4.2并出现问题:KODO生成的查询效率低下。当将包含集合的对象(该集合具有双向关系)回迁到第一个对象时,会发生这种情况Java KODO:如何设置双向关系的获取计划?,java,orm,jdo,kodo,Java,Orm,Jdo,Kodo,运行KODO 4.2并出现问题:KODO生成的查询效率低下。当将包含集合的对象(该集合具有双向关系)回迁到第一个对象时,会发生这种情况 Class Classroom { List<Student> _students; } Class Student { Classroom _classroom; } 如果我们创建一个获取计划,通过设置以下获取计划来获取教室及其相应学生的列表: fetchPlan.addfield教室.class,“\u学生” 这将导致两
Class Classroom
{
List<Student> _students;
}
Class Student
{
Classroom _classroom;
}
如果我们创建一个获取计划,通过设置以下获取计划来获取教室及其相应学生的列表:
fetchPlan.addfield教室.class,“\u学生”
这将导致两个查询得到教室,然后得到教室中的所有学生,这是我们所期望的
但是,如果我们在获取计划中包含对教室的引用,以便通过执行fetchPlan.addFieldStudent.class“\u教室”填充_教室字段,这将导致X个额外的查询,其中X是每个教室中的学生数量
有人能解释一下如何解决这个问题吗?KODO在执行查询以检索教室对象并在每个学生对象的_教室字段中设置它们时,已经拥有原始教室对象。因此,我希望KODO只需在每个学生对象的_教室字段中相应地设置这些对象,而不返回数据库
再一次,文档非常缺乏,但从我所阅读的内容来看,它应该能够更有效地做到这一点
注意-EAGER_FETCH.PARALLEL已打开,我已在打开和关闭缓存查询和数据缓存的情况下尝试了这一点,结果查询没有差异。与Oracle支持合作解决了这一问题-这是Kodo 4.2最新版本中的一个缺陷。修复方法是完全去掉默认的fetchgroup属性,而不只是从jdo元数据文件中为双向关系中一对一的字段将其设置为true或false。因此,在上面的示例中,您将去掉Student.\u教室字段的默认fetch group属性