带有延迟加载的MVC
问题内容:
如果这是完全相同的内容,请纠正我,我知道这个话题经常被讨论,但是找不到确切的答案。
问题:
在MVC Web应用程序中处理Hibernate对象的最佳实用解决方案是什么?
细节:
我正在使用Hibernate,并希望在可能的情况下利用延迟加载。
我正在使用MVC风格的webapp。
我讨厌获得延迟加载初始化异常。
我讨厌不得不在事务之间重新连接Hibernate对象。
选项:
- 渴望装载一切
- 解决了懒惰的初始化问题,但使我的查询更大
- 使用一些“在视图中打开会话”概念
- 我喜欢它的简单性
- 仍然需要重新附加对象,并且在AJAXy设置中,经常
- 为每个请求打开一个会话
- 离开交易前我需要“触摸”物品
- 充其量似乎很脆弱。
- 创建不同的,简化的“分离”对象,以便视图永远看不到真正的Hibernate对象
- 这些可能比完整的Hibernate对象要简单,所以它不像是一个完整的模型
- 我听说过此建议,但似乎更多的责任/代码/工作
- 当我想与Hibernate对象进行交互时,打开一个会话。
- 可以很好地将其包装在Spring Service层中,但有时似乎过多。例如:我想要
hibernateObject.getRelatedObjects()
但需要说些类似的话springService.getRelatedObjects(hibernateObject)
- 可以很好地将其包装在Spring Service层中,但有时似乎过多。例如:我想要
我想念什么吗?
我是否考虑得太多了?
我是否考虑不足?
PS:
对于Web框架,我正在使用ZK,但实际上 并不 需要ZK特定的答案。
我也在使用Spring,并且对Spring的特定回答很酷,因为它无处不在。
问题答案:
使用4-ish-
不要在视图中使用开放会话,不要让您的休眠实体一直冒泡到视图,而是要让转换器在休眠实体和域对象或“视图bean”之间转换,具体取决于您的方式想要工作。
我认为Hibernate实体只是一种持久策略,而不是域模型或UI表示。