Java JPA在扩展持久性上下文中管理实体的最佳实践
我使用的是CDI会话范围、Seam管理的扩展持久性上下文(PC)。这提供了对PC更细粒度的控制,并避免了谎言。我正在使用cdibean而不是ejbbean。在页面中,我检索实体列表并将它们显示在表中。从表中选择的实体记录绑定到表单,可以编辑,但在单击“保存”按钮之前不能持久化。在这里,问题就出现了,因为所有实体都是管理的,所以当我在保存操作中尝试刷新/提交一个当前实体时,编辑的实体也会被持久化。解决此类问题的首选最佳实践方法是什么。我应该在托管实体和查看/编辑实体之间使用中间POJO吗?我是否应该分离然后合并(保存前)当前进行中的实体?有什么建议吗 JPA2.0,Hibernate4.xJava JPA在扩展持久性上下文中管理实体的最佳实践,java,jpa,persistence,jpa-2.0,java-ee-6,Java,Jpa,Persistence,Jpa 2.0,Java Ee 6,我使用的是CDI会话范围、Seam管理的扩展持久性上下文(PC)。这提供了对PC更细粒度的控制,并避免了谎言。我正在使用cdibean而不是ejbbean。在页面中,我检索实体列表并将它们显示在表中。从表中选择的实体记录绑定到表单,可以编辑,但在单击“保存”按钮之前不能持久化。在这里,问题就出现了,因为所有实体都是管理的,所以当我在保存操作中尝试刷新/提交一个当前实体时,编辑的实体也会被持久化。解决此类问题的首选最佳实践方法是什么。我应该在托管实体和查看/编辑实体之间使用中间POJO吗?我是否应
焊缝3(焊缝CDI、持久性、事务、面模块)
JSF2.1
Java EE 6.如果我理解正确,那么:
实际上,您不需要为此使用扩展的持久性上下文,因为您需要在请求之间保留的任何对象都将被分离。我们使用了类似的方法,但使用了EJB3 bean,没有Seam持久性上下文。不过,也许我们的经验对你有用 这个想法是:
- 在bean中使用扩展的
持久上下文
- 使所有方法不带事务-否则您的实体将在调用后提交
- 将save方法设置为具有事务的方法
LazyException
。这与使用一些DTO完全相同
希望有帮助 我在前端使用Primefaces,默认情况下是ajax提交对实体所做的更改。在我管理Primefaces组件之后,问题就消失了