我正在使用spring 4.0和hibernate 4.3,
问题在于,如果我通过session.openSession()获取hibernate会话对象,那么我可以在任何地方初始化包含JSP的惰性对象,但是我必须通过自己来管理hibernate的会话对象,这是错误的做法。 / p>
但是,如果我通过session.getCurrentSession()创建会话,那么我得到spring为我管理会话的好处,但后来发生这个问题,我不能懒惰地将对象初始化为像JSP这样的事务边界。
每次我不想将域对象注释更改为Eager时,我也不希望每次为每个惰性对象显式设置查询获取模式为eager或join。
总的来说,我只是想问一下,当与spring和hibernate一起使用时,处理延迟初始化对象的正确方法是什么。请帮忙
答案 0 :(得分:0)
以下是我在需要时获取延迟加载数据的逻辑。
import java.io.Serializable;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate4.HibernateTemplate;
import org.springframework.stereotype.Service;
public class UserDAO implements GenericDao<User,String> {
@Autowired
private HibernateTemplate template;
@Override
public User load(final String id) {
return template.load(User.class,id);
}
@Override
public User get(final String id) {
return template.get(User.class,id);
}
public User getUserVideos(final String id) {
User user = template.get(User.class,id);
template.initialize(user.getVideo());
return user;
}
@Override
public Long count() {
return new Long(template.loadAll(User.class).size());
}
@Override
public void flush() {
template.flush();
}
}
您可以在JSP中或您想要的任何地方使用返回的对象