更新
好的,经过多年的编程后,如果您使用会话范围的表单以及延迟加载和延迟提交,我发现自己缺乏如何在您的webapp中正确使用JPA的知识。
案例如下:
em.persist(rootObject);
使用Cascade.ALL
)。根据TomEE网站http://tomee.apache.org/jpa-concepts.html的简要说明,人们不能在webapp中使用JTA持久性,因此,鉴于延迟加载仅在打开持久性上下文时才会起作用,所以应该进行所有延迟加载em.close()
之前的东西。如果我使用请求范围的EntityManager,这个事实阻止我实现第3点和第6点。我可以通过在会话级别移动EntityManager来解决它,但是如果我这样做,我就无法满足第4点 - 已经对子对象进行了更改,对象在表单关闭后仍然被管理。如果我将EntityManager移动到表单范围,应用程序将变为jdbc资源密集型(或不是Does an entity manager create a connection to the database?,以及http://openjpa.apache.org/builds/1.0.2/apache-openjpa-1.0.2/docs/manual/ref_guide_dbsetup_retain处的OpenJPA设置。)
我还有其他选择吗?
答案 0 :(得分:0)
如果您正在使用EclipseLink,则在关闭持久性上下文后,允许访问LAZY关系。
答案 1 :(得分:0)
好吧,我有点解决了这个问题。 如果我以可以在表格中存储草稿条目的方式修改第3点,那么这个问题不再是一个问题,这大大简化了整个解决方案。
我很高兴看到来自社区的其他想法:)