【发布时间】:2012-03-06 08:17:35
【问题描述】:
我想知道在 Hibernate/JPA 世界中处理数据表的正确方法是什么。据我所知,以下三个选择之一是导致整个纸牌屋分崩离析,但我不知道哪个是错误的。
- 半自动事务和 EntityManager 处理通过自定义 JSF PhaseListener 开始并围绕每个请求提交事务
- 将编辑组件放入数据表中
- 使用请求范围的托管 bean,从请求范围的 EntityManager 获取数据(在 PrettyFaces 的帮助下,通过其 URL 设置请求范围的 bean 的 ID)
- 使用请求范围的 bean 而不是视图或会话范围的 bean 支持 dataTable。
我看到an ICEfaces dataTable demo using JPA,但他们都是手动管理事务,默认情况下不显示编辑组件。您单击导致对象被提名为可编辑的行,然后当您点击“保存”时,它会在手动触发保存之前手动将对象重新连接到新的 EntityManager。我认为这里的点击编辑功能为我们提供了一种方法来确保将正确的对象重新附加到当前会话,我不知道如果没有类似的东西将如何生活。
我对新的 ICEfaces 3.0 ace:dataTable (née PrimeFaces 2.0 dataTable) 的印象是,它旨在用于视图或会话范围的 bean,但我不明白怎么能如果一个模型对象从请求 A 和 EntityManager A 中的 DAO 出来,然后被请求 B 和 EntityManager B 修改或分页,则绕过 StaleObjectState 和/或 LazyInitializationExceptions。
我想它可能在 Java EE 下通过某种深度 fu 工作,但我现在没有将我们从 Tomcat 6 升级到更高级的东西的奢侈(尽管从长远来看这是我的意图)。我们也不打算开始使用 Spring 或 Seam 或任何其他很酷的东西。 ICEfaces 对我们来说已经够奇怪了,说实话可能太奇怪了。
所以总结一下,以下哪个是错误的选择?请求范围的实体管理器、请求范围的数据表或在数据表中使用编辑组件?还是这里真的有其他问题?
【问题讨论】:
标签: jsf-2 icefaces-2