我有entity A,与有着多对多的关系entity B。
entity A
entity B
因此表布局为: A, AB(mapping table), B
A, AB(mapping table), B
为了得到实体A的对象:我叫A.getById()其不getHibernateTemplate().get(A.class, id) 使用spring和hibernate。
A.getById()
getHibernateTemplate().get(A.class, id)
问题是,有时后续代码仅需要A,有时后续代码将继续访问关联的B,因此我们希望在某些情况下使用 延迟加载, 在某些情况下则 渴望 使用。但是问题是所有数据库访问都是通过同一单一数据库提供的ADao.java,因此只有一种方法getById()。
ADao.java
getById()
我应该创建方法getById()的两个版本吗?
但是对于更复杂的情况,如果A也通过多对多连接到C,则可能存在懒加载C和急切加载C的getById()变体,因此所需的变体迅速成倍增长。
您对此选择有何看法?
谢谢
出于一般考虑,请参阅有关获取策略的Hibernate 3.6文档。默认的获取策略是在映射注释或hbm.xml文件中定义的。有三种方法可以从默认的延迟加载策略动态切换到优先加载策略。对于懒加载和急加载用例,前两个需要DAO方法的单独实现:
Criteria.setFetchMode()
FETCH
提取配置文件在会话范围内启用/禁用。因此,只要在当前会话中设置了所需的提取配置文件,就可以将相同的DAO方法用于延迟加载和快速加载用例。
在此需要注意的重要一点是,您 只能从 注释或hbm.xml文件中定义 的延迟加载策略切换 到渴望加载策略 ,反之亦然。此限制与用于切换获取策略的方法无关。