Я новичок в зимнем режиме. Я использую следующий код, чтобы получить мой объектHibernate stop lazy loading
@Transactional(readOnly = true,propagation=Propagation.NEVER)
public StaffSkillChecklist listSkillMatrixByChecklistIdForStaff(Long checklistid, Long staffId) {
StaffSkillChecklist sc = (StaffSkillChecklist) em.unwrap(Session.class)
.createCriteria(StaffSkillChecklist.class, "staffchecklist")
.createAlias("staffchecklist.staffSkillRatingSet", "staffSkillRating", JoinType.LEFT_OUTER_JOIN)
.setFetchMode("staffSkillRating", FetchMode.JOIN)
.createAlias("staffchecklist.skillChecklist", "skillChecklist", JoinType.LEFT_OUTER_JOIN)
.setFetchMode("skillChecklist", FetchMode.JOIN)
.createAlias("staffSkillRating.skillGroup", "skillGroup", JoinType.LEFT_OUTER_JOIN)
.setFetchMode("skillGroup", FetchMode.JOIN)
.createAlias("staffSkillRating.skill", "skill", JoinType.LEFT_OUTER_JOIN)
.setFetchMode("skill", FetchMode.JOIN)
.createAlias("staffSkillRating.skillRating", "skillRating", JoinType.LEFT_OUTER_JOIN)
.setFetchMode("skillRating", FetchMode.JOIN).addOrder(org.hibernate.criterion.Order.asc("id"))
.add(Restrictions.and(Restrictions.eq("staffchecklist.staff.id", staffId),
Restrictions.eq("skillChecklist.id", checklistid)))
.uniqueResult();
return sc;
}
Теперь в моем ServiceClass, мне нужно перебирать объект и преобразовать в DTO, но при этом так, спящий режим запросов БД снова
public SkillChecklistDTO toDTO(SkillChecklist skillChecklist, int depth) {
if (skillChecklist == null) {
return null;
}
Set<SkillChecklistGroup> scgList = new HashSet<SkillChecklistGroup>();
//HIBERNATE WILL FIRE A QUERY again
scgList = skillChecklist.getChecklistGroups();
return dto;
}
Как снова заблокировать спящий режим. У моего первого запроса есть все, что я хочу.
это не работает – coder310
пытаться заменить .setFetchMode ("skillChecklist", FetchMode.JOIN) по .setFetchMode ("skillChecklist", FetchMode.EAGER) – chomnoue