我正在研究的一个项目是从jee5 / seam升级到jee6,其中“descide”认为放下接缝是一个好主意,因为它的大部分功能已经整合到jee6中。但是我有一个案例,我似乎无法在jee6中解决。
我们有几个使用ConversationScope的向导。我们使用Seams FlushModeType.Manual以避免在我们希望提交它之前提交“脏”数据(每个页面加载基本上都获得它自己的事务,但因为在我们刷新之前没有任何内容写入数据库,所以大多数提交都没有不要改变数据库的状态。
我在jee6中使用PersistenceContextType.EXTENDED做了一些尝试,但似乎我找不到像接缝那样将刷新推迟到数据库的方法,唯一的解决办法似乎是使用分离的对象或单独的视图模型。
我们非常喜欢使用附加对象(对于我们的案例)如何简单易懂和快速开发。
我们是否可以继续使用对话中的附加对象?
答案 0 :(得分:2)
作为Seam2的忠实粉丝,我使用会话编写了很棒的应用程序,会话作用域实体管理器将刷新模式设置为手动和分离对象。
然而,我们现在必须承认,尽管在Seam手册中被强烈推动并且在Hibernate中工作得很好,这种模式是JPA实现,但从根本上打破了这种模式。 Mark Struberg的这篇文章解释了原因:Is There A Way To Fix the JPA EntityManager?
所以,答案是否定的,没有实际的解决方案来继续处理对话中的附加对象。您应该使用分离的对象。
还有另一位伟大的CDI博客作者尝试了对话范围的实体经理:Conversational CRUD。如果你继续尝试使用附加对象,可能值得一读。