MVC与延迟加载

Sea*_*lly 7 java spring hibernate transactions zk

纠正我,如果这是一个完全重复,我知道这个主题经常讨论,但无法找到明确的答案.

问题:

在MVC webapp中处理Hibernate对象的最佳实用解决方案是什么?

细节:

我正在使用Hibernate并希望在可能的情况下利用延迟加载.
我正在使用MVC风格的webapp.
我讨厌得到延迟加载初始化异常.
我讨厌在事务之间重新连接Hibernate对象.

选项:

  1. 渴望加载一切
    • 解决了延迟初始化问题,但使我的查询更大
  2. 使用一些"在视图中打开会话"的概念
    • 我喜欢它的简单性
    • 对象仍然需要重新连接,并且在AJAXy设置中,经常需要重新连接
    • 会话将针对每个请求打开
  3. 在离开交易之前我需要"触摸"项目
    • 看起来很脆弱......而且单调乏味
  4. 创建不同的,简化的"分离"对象,以便视图永远不会看到真正的Hibernate对象
    • 这些可能比完整的Hibernate对象更简单,因此它不像模型的完全热切负载
    • 我听说这个地方推荐,但似乎更多的责任/代码/工作
  5. 当我想要与Hibernate对象交互时打开一个会话.
    • 这可以很好地包含在Spring Service层中,但有时似乎过多.例如:我想要hibernateObject.getRelatedObjects()但需要说出类似的话springService.getRelatedObjects(hibernateObject)

我错过了什么吗?
我是否过度思考过?
我有没有想过的事情?

PS:

对于Web框架,我使用的是ZK,但并不真正需要ZK特定的答案.
我也使用Spring而且很酷的是Spring特定的答案,因为它无处不在.

bla*_*ank 5

使用4-ish - 不要在视图中使用开放会话,不要让你的hibernate实体一直冒泡到视图而不是变换器在hibernate实体和你的域对象或'view beans'之间进行转换,具体取决于你的方式想要工作.

我认为Hibernate实体只是一个持久性策略而不是域模型或UI表示.