我倾向于将Hibernate与Spring框架结合使用,它具有声明式事务划分功能(例如@Transactional)。
众所周知,hibernate试图尽可能做到 非侵入性 和 透明性 ,但是事实证明,在使用关系时这 更具挑战性 lazy-loaded 。
lazy-loaded
我看到了许多具有不同透明度的设计方案。
fetchType=FetchType.EAGER)
Hibernate.initialize(proxyObj);
initialize
Model
@Transactional
loadData()
loadDataWithDeps()
loadDataWithA()
loadDataWithX()
byId()
findZzzById(zid)
getYyyIds(zid)
z.getY()
loadData(id, fetchProfile);
我错过了任何选择吗?
尝试最小化lazy-loaded关系对应用程序设计的影响时,您首选的方法是什么?
(哦,对不起,WOT)
众所周知,hibernate试图尽可能做到无创且透明
我会说最初的假设是错误的。透明持久性是一个神话,因为应用程序始终应注意实体生命周期和要加载的对象图的大小。
请注意,Hibernate无法读取想法,因此,如果您知道特定操作需要特定的一组依赖关系,则需要以某种方式表达您打算使用Hibernate的意图。
从这个角度来看,明确表达这些意图(即2、4和7)的解决方案看起来是合理的,并且不会遭受缺乏透明度的困扰。