ted*_*ddy 5 design-patterns hibernate lazy-evaluation
我有entity A
,它有多对多的关系entity B
.
所以表格布局是: A, AB(mapping table), B
获取实体A的对象:我调用A.getById()
哪个getHibernateTemplate().get(A.class, id)
使用spring和hibernate.
问题是,有时随之而来的代码将只需要一个,有时随后的代码将继续访问相关的B的,所以我们想使用延迟加载在某些情况下,并渴望在其他一些情况下.但问题是所有数据库访问都是通过同一个单独提供的ADao.java
,因此只有一种方法getById()
.
我应该创建两个版本的方法getById()吗?
但是对于更复杂的情况,如果A也通过多对多连接到C,那么可能存在lazy-loading-C和eager-loading-C的getById()
变体,因此所需的变体快速呈指数增长.
你对这个选择有什么看法?
谢谢
对于一般注意事项,请查看有关获取策略的Hibernate 3.6 文档。默认获取策略在映射注释或 hbm.xml 文件中定义。有三种方法可以动态地从默认的延迟加载策略切换到急切加载策略。前两个需要针对延迟加载和急切加载用例单独实现 DAO 方法:
Criteria.setFetchMode()
在 Hibernate Criteria 查询中FETCH
HQL 查询中的关键字在会话范围内启用/禁用获取配置文件。因此,只要在当前会话中设置了所需的获取配置文件,您就可以使用相同的 DAO 方法进行延迟加载以及急切加载用例。
这里需要注意的重要一点是,您只能从注释或 hbm.xml 文件中定义的延迟加载策略切换到急切加载策略,反之亦然。此限制与用于切换获取策略的方法无关。
归档时间: |
|
查看次数: |
1738 次 |
最近记录: |