java - 使用 Spring HibernateDaoSupport 进行延迟加载?

标签 java hibernate spring orm lazy-loading

您好 我正在使用 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/

相关文章:

java - 在gradle多项目中,如何构建单个jar并将其发布到maven?

Java - Set<ObjectS> removeAll(Set<Object>) 不执行其工作

spring - Spring-boot 是否通过@GeneratedValue 改变了 ids 自动增量的工作方式?

java - 为什么 SessionAttributes 在 GET 重定向时被清除?

ajax - 将 Map<String,String> 传递给 springMVC Controller

java - 最终字符串[]和最终字符串

java - 主/详细流程 - 点击列表项后在主区域中打开列表 fragment

java - 将 Struts2 表单保存到数据库

java - 无法 Autowiring 项目中的实体 Bean

java - Spring Boot 同步启动器