我想知道什么是处理在Hibernate/JPA世界中输入数据表的正确方法。据我所知,以下三种选择中的一种导致整个卡片房子崩溃,但我不知道哪一个是错的。将ice/ace:dataTable与JPA和请求范围bean集成
- 半自动交易和EntityManager的通过自定义JSF PhaseListener在开始和提交周围的每一个请求
- 把里面的DataTable
- 编辑组件使用请求范围的托管bean是从获取他们的数据事务处理请求范围的EntityManager(在PrettyFaces的帮助下,通过URL的请求范围bean设置ID)
- 使用请求范围的bean而不是视图或会话范围的bean来备份dataTable。
我看到an ICEfaces dataTable demo using JPA但它们都是手动管理事务并且默认情况下不显示编辑组件。您单击导致对象被提名为可编辑性的行,然后当您点击“保存”时,手动将对象重新连接到新的EntityManager,然后手动触发保存。我在这里看到了点击编辑功能,它为我们提供了一种方法来确保将正确的对象重新附加到当前会话中,并且我不知道如果没有类似的东西,我们将如何生活。我得到的关于新的ICEfaces 3.0 ace:dataTable(néePrimeFaces 2.0 dataTable)的印象是,它打算用在视图或会话范围的bean中,但我看不到如何可以绕过StaleObjectState和/或LazyInitializationExceptions,如果有一个模型对象从请求A和EntityManager A中的DAO出来,然后通过请求B与EntityManager B进行修改或分页。
我想它可能在Java EE通过某种深厚的功夫,但我没有把我们从Tomcat 6升级到任何更漂亮的东西的奢望(尽管这是我长期的目的)。我们也不会开始使用Spring或Seam或其他很酷的东西。 ICEfaces对我们来说足够怪异,老实说可能太奇怪了。
那么总结一下,哪个是错误的选择?请求范围的实体管理器,请求范围的数据表或使用dataTable中的编辑组件?或者在这里有其他问题呢?
感谢您详细的解答。如果我有我的druthers,我们将升级到Glassfish;我已经获得了一些我们的应用程序,可以在它下面成功加载,但没有任何东西可以在TomEE下实际运行。我完全同意你对情况的分析,我只是没有强迫组织在这个时候做我想做的事。不过,我想我可以运用你的建议并找到前进的方向。再次感谢! – 2012-02-19 16:29:33
@DanielLyons为了我们的利益(我在TomEE上工作),你能否提供一些有关TomEE在dev(at)openejb.apache.org上遇到的问题的细节。我们是一个年轻的服务器,我们确实需要所有我们可以获得的反馈。 – 2012-02-19 22:02:40
本周晚些时候我会告诉你一些细节。我认为困难是由于它是一个测试版。 – 2012-02-19 23:21:24