0
我是新的休眠。 我用下面的代碼讓我的對象休眠停止延遲加載
@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;
}
現在在我的服務類,我需要遍歷對象,並轉換爲DTO,但在這樣做時,Hibernate查詢數據庫再次
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;
}
如何我是否會停止再次發起查詢的休眠。我的第一個查詢具有我想要的一切。
更換
.setFetchMode("skillChecklist", FetchMode.JOIN)
這不起作用 – coder310嘗試.setFetchMode更換.setFetchMode( 「skillChecklist」,FetchMode.JOIN)語句( 「skillChecklist」,FetchMode.EAGER) – chomnoue