嗨,我有一个问题,我不知道,如果可能的话。我有一个道。我有实体,我已经定义了经典的OneToMany assoc。
@OneToMany
public Set<InterviewEntity> getCreatedInterviews() {
return createdInterviews;
}
OneToMany - &gt; fetch的默认值是Lazy。在dao我有方法findById()...
见下文:
@Override
public T findById(long id) {
Session session = sessionFactory.openSession();
T entity = (T) session.get(thisClass, id);
session.close();
return entity;
}
我只想这样:
EmployeeEntity resultEmployee = employeeDao.findById(employeeEntity.getEmployeeId());
resultEmployee.getCreatedInterviews();
我可以使用Hibernate.initialize()在具体的Dao类中使用@Override方法findById,但我认为它不那么实用。有人有什么想法吗?
答案 0 :(得分:2)
您的代码会在实体检索后立即关闭session
,因此您的resultEmployee.getCreatedInterviews()
将无效,因为没有公开会话。
我认为你的问题不是使用延迟加载,而是使用耦合会话管理代码和DAO代码。
如果你正确使用它,Hibernate Lazy功能很不错。尝试在业务级别而不是DAO级别解耦会话管理。我的意思是,当你从视图中调用一些业务逻辑时:
如果要将数据从商家移动到视图,请使用VO / DTO以避免延迟问题。
这样你就可以拥有漂亮,清晰和可维护的代码。
希望它有所帮助!