问候,我正在使用Spring+Hibernate开发非网络。我的问题是HibernatedAosupport如何处理懒惰加载,因为在通话后DO DAO后,会话已关闭。

看看以下psuedo代码:

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())会话已关闭。

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();
有帮助吗?

解决方案

我的问题是HibernatedAosupport如何处理懒惰加载,因为在致DAO的电话后,会话已关闭。

DAO不会为每个呼叫创建/关闭会话,他们对此不承担任何责任,通常是使用“开放会议“模式(Spring为此提供过滤器或拦截器)。但这是针对Web应用程序的。

在摇摆应用中,一种解决方案是使用 长会议. 。您必须确定定义明确的点才能关闭会话以发布内存。对于小型应用程序,这通常很简单,并且会起作用。对于更大的(即现实生活中的应用程序),正确的解决方案是每个帧/内部帧/对话框使用一个会话。它很难管理,但会扩展。

您可能想阅读的一些线程:

其他提示

更多的时间和调查似乎这是“正常”的行为。错误并不重要,尽我所能地抛弃;它甚至可能甚至是实际的实际错误。它看起来像办公室客户做一些乱砍他们所做的事情。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top