WEB开发网
开发学院软件开发Java Spring Web Flow 2 中流管理的持久化 阅读

Spring Web Flow 2 中流管理的持久化

 2010-05-18 00:00:00 来源:WEB开发网   
核心提示: 在 JPA/Hibernate 中,数据(更确切地说是实体关系)可能急切加载或延迟加载为代理对象,Spring Web Flow 2 中流管理的持久化(2),如果持久化上下文对象(JPA EntityManager 或 Hibernate Session)在视图呈现阶段已经关闭,那么实体就会分离

在 JPA/Hibernate 中,数据(更确切地说是实体关系)可能急切加载或延迟加载为代理对象。如果持久化上下文对象(JPA EntityManager 或 Hibernate Session)在视图呈现阶段已经关闭,那么实体就会分离。任何访问分离实体上已卸载的关系的尝试都将导致 LazyInitializationException 异常。

Open Session in View 模式试图解决 LazyInitializationException 异常。当 Open Session in View 模式作为过滤器或拦截器实现时,持久化上下文对象在视图呈现期间会保持打开状态。导航到持久实体上的已卸载关系将触发其他的数据库查询来按需获取关系。

Open Session in View 模式的一个缺点是持久化上下文对象被高效地划定到用户请求作用域内。因此,存储在 Servlet 作用域中的实体,除当前请求外,总是被分离。分离的实体需要合并/重新连接/重新加载操作才能与当前持久化上下文关联。

Spring Web Flow 采用了不同的方法,它通过流管理的持久化,更确切地说是流作用域的持久化上下文对象,解决了分离实体状态的问题。

流管理的持久化

Spring Web Flow 中的应用程序开发基于 Web 流 的概念,Web 流通常代表一个单独的用例。在很多情况中,整个 Web 流中的数据变化需要是 原子的,也就是说流不同阶段的变化或者作为整体被保存到后端数据库中,或者全部取消,在数据库中不留下任何痕迹。

Spring Web Flow 通过流管理的持久化 机制简化了事务性原子 Web 流中的 JPA/Hibernate 编程。流管理的持久化在概念上与 Hibernate/Seam 对话一样,其中在 Web 流(或者 Seam 中的 “页面流”)期间进行的数据变更都作为脏实体缓存在同一个流作用域的持久化上下文对象中。直到流结束时才会激活 SQL insert/update/delete 语句,将变更一次刷新并提交到数据库中。(注意,“刷新” 和 “提交” 是不同的概念;前者激活一系列 SQL insert/update/delete 语句使脏实体与其相应数据库值同步,而后者只是提交数据库事务)。

上一页  1 2 3 4 5 6 7  下一页

Tags:Spring Web Flow

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接