Проблемы с производительностью репозитория с рекурсивным классом ORMJAVA

Программисты JAVA общаются здесь
Anonymous
Проблемы с производительностью репозитория с рекурсивным классом ORM

Сообщение Anonymous »

Моя цель:
У меня есть дети на самом низком уровне (например, идентификатор навыка 10 и 12) в списке. Теперь я хочу, чтобы все родители (parent_id = null) для каждого ребенка (в данном случае, родитель 34), и сохранили их в списке. В конце концов, я хочу путь от родителя к каждому ребенку (34-9-10 и 34-9-12). Позже я хочу проверить каждый навык на этих путях (34, 9, 10, 12).
Наконец, у меня есть коллекция навыков, которые иллюстрируют пути сверху вниз. Родителю 34)

Теперь я прошу каждый родительский элемент (parent_id = null) с репозиторием Spring Crud. Для этого я использую цикл, который итерации по списку со всеми родительскими элементами и вызов Findone (ParentElementId) для каждого идентификатора родительского элемента и с использованием ленивой загрузки: < /p>
List parentList = skillDAO.findBySkill(null);
HashMap parentTree = customSkillDAO.findParentIdsByPersonSkills(listPersonskill);

//Integer: Durchnummeriert zur Eindeutigkeit, von 0,1,2...
//List: Pfad vom höchsten Vaterlement zum niedrigsten Personskill
//Notwendig, um den Pfad pro niedrigsten Knoten auf true zu setzen
HashMap parentTree = customSkillDAO.findParentIdsByPersonSkills(listPersonskill);
log.info("START FINDING CHECKED");
//keySet is just numbered from 0,1,2,3...
for (int counter : parentTree.keySet()) {
//parentTree.get(counter) gives a list with Integer that describes the path from top to bottom.
//So the first element is always the parent.
mapParentSkills.put(parentTree.get(counter).get(0), new SkillDTO(skillDAO.findOne(parentTree.get(counter).get(0))));
mapParentSkills.get(parentTree.get(counter).get(0)).setChecked(true);
}
log.info("START FINDING NOT CHECKED");
//Add all other parent that are not checked
for (Skill skill : parentList) {
if (!mapParentSkills.containsKey(skill.getIdSkill())) {
mapParentSkills.put(skill.getIdSkill(), new SkillDTO(skill));
}
}

log.info("ENDE SKILLS");
< /code>
Я получаю все дерево, что в порядке. Единственная проблема заключается в том, что это занимает около 10 секунд. Может ли кто -нибудь сказать мне некоторое предложение улучшить его, чтобы сделать это, по крайней мере, за
...some @jsonbackReerences, которые не загружаются < /p>
@JsonBackReference
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id")
public Skill getSkill() {
return this.skill;
}

public void setSkill(Skill skill) {
this.skill = skill;
}

@JsonManagedReference
@OneToMany(fetch = FetchType.LAZY, mappedBy = "skill")
public Set getSkills() {
return this.skills;
}

public void setSkills(Set skills) {
this.skills = skills;
}

}
< /code>
log: < /p>

web-2016-02-13 16: 53: 50,163 [Http-nio-8080-Exec-2] Info C.S.Controller.ProfIleController--0: 0: 0: 0: 0: 0: 0: starteContred
hibernate: select skills0_.parent_id as parent_i4_15_0_, навыки0_.idskill as idskill1_15_0_, навыки0_.idskill as idskill1_15_1_15_0_. навыки0_.name as name2_15_1_, навыки0_.parent_id as parent_i4_15_1_ из Quanto_portal.skill Skills0_, где навыки0_.parent_id =? 16: 53: 59,289 [http -nio -8080 -exec -2] Info C.S.Controller.ProfIleController - -0: 0: 0: 0: 0: 0: 0: 1 -Ende Skills < /p>
< /blockquote>
2016-02-13 19: 48: 25,471 [HTTP-NIO-8080-EXEC-2] Информация C.S.Controller.ProfileController--0: 0: 0: 0: 0: 0: 0: 1-начало обнаружения. levelbezei0_.idlevelbezeichnung as idlevelb1_4_0_, levelbezei0_.bezeichnung как bezeichn2_4_0_ из Quanto_portal.levelbezeichnung levelbezei0_ blockquete0_.idlevelbeichnung = /> Web-2016-02-13 19: 48: 25,806 [HTTP-NIO-8080-EXEC-2] Info C.S.Controller.ProfIleController--0: 0: 0: 0: 0: 0: 1-начало не проверяется < /p>
< /blockquote>
. 19:48:25,807 [http-nio-8080-exec-2] INFO c.s.controller.ProfileController - - 0:0:0:0:0:0:0:1 - ENDE SKILLS

SKILLDTO:
public SkillDTO(Skill skill) {
idSkill = skill.getIdSkill();
name = skill.getName();
levelBezeichnung = skill.getLevelBezeichnung().getBezeichnung();
checked = skill.isChecked();
if (skill.getSkills().size() > 0) {
Iterator iteratorSkill = skill.getSkills().iterator();
while (iteratorSkill.hasNext()) {
Skill tempSkill = iteratorSkill.next();
skills.add(convertSkillsToProfileDTO(tempSkill));
}
}
}

private SkillDTO convertSkillsToProfileDTO(Skill skill) {
return new SkillDTO(skill);
}


Подробнее здесь: https://stackoverflow.com/questions/353 ... -orm-class

Вернуться в «JAVA»