您好 我正在使用 Spring+Hibernate 开发一个非 Web 应用程序。 我的问题是 HibernateDaoSupport 如何处理延迟加载,因为在调用 do DAO 之后, session 关闭。
看看下面的伪代码:
DAO 就像:
CommonDao extends HibernateDaoSupport{
Family getFamilyById(String id);
SubFamily getSubFamily(String familyid,String subfamilyid);
}
域模型是这样的:
Family{
private List<SubFamily> subfamiles;
public List<SubFamily> getSubFamiles();
}
SubFamily{
private Family family;
public Family getFamily();
}
在应用程序中,我从 app-context 获取 DAO 并希望执行以下操作。这是否可能与延迟加载有关,因为 AFAIK 在每个方法(getFamilyById()、getSubFamily())之后 session 都关闭了。
CommonDAO dao=//get bean from application context;
Family famA=dao.getFamilyById(familyid);
//
//Do some stuff
List<SubFamily> childrenA=fam.getSubFamiles();
SubFamily asubfamily=dao.getSubFamily(id,subfamilyid);
//
//Do some other stuff
Family famB=asubfamily.getFamily();
最佳答案
My question is how the HibernateDaoSupport handles lazy-loading , because after a call to DAO, the Session is closed.
DAO 不会为每次调用创建/关闭 session ,他们对此不负责,这通常使用“Open Session in View”模式完成(Spring 为此提供过滤器或拦截器)。但这是针对网络应用程序的。
在 swing 应用程序中,一种解决方案是使用 long session .您必须决定明确定义的点,在该点关闭 session 以释放内存。对于小型应用程序,这通常很简单并且可行。对于更大的(即现实生活中的应用程序),正确的解决方案是每个框架/内部框架/对话框使用一个 session 。它更难管理,但会扩展。
一些您可能想阅读的主题:
关于java - 使用 Spring HibernateDaoSupport 进行延迟加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2145024/