2012-06-30 42 views
4

我使用CDI对话范围,Seam管理扩展持久性上下文(PC)。这提供了对PC的更精细的控制并避免了LIE。我正在使用CDI Beans而不是EJB Beans。在页面中,我检索实体列表并将它们显示在表格中。从表中选择的实体记录绑定到表单并可以编辑,但不保留,直到单击“保存”按钮。在这个地方出现这个问题,因为所有实体都被管理,所以当我尝试刷新/提交保存操作中的一个当前实体时,编辑的实体也会被保留。这种问题的首选最佳实践方法是什么?我应该在管理实体和查看/编辑的实体之间使用中间POJO吗?我应该分离然后合并(保存之前)当前正在进行的实体吗?有什么建议么?JPA在扩展持久性上下文中管理实体的最佳实践

JPA 2.0,休眠4.x的
接缝3(焊接CDI,持久性,交易,面向模块)
JSF 2.1
的Java EE 6.

回答

0

我在前端使用Primefaces,它是ajax默认提交对实体所做的更改。在管理Primefaces组件后,问题消失了。

2

如果我正确理解,则:

  1. 实体对象显示在页面上
  2. 用户可以更改这些对象
  3. 用户可以保存一个对象以将更改提交到数据库

我认为这里的正确方法是在编辑对象时分离对象,然后在保存对象时重新附加它们(通过合并)。这只会保留内存中未保存的更改。

您实际上并不需要扩展持久化上下文,因为您需要在请求之间保留的任何对象都将被分离。

3

我们使用了类似的方法,但使用了EJB3 bean,并且没有Seam持久化上下文。尽管如此,也许我们的经验可能对你有用。

当时的想法是:

  • 使用extendedPersistenceContext在bean
  • ,恕不事务中的所有方法 - 否则你的实体将在调用之后致力于
  • 使保存方法一用一交易。

分离实体会杀死给实体提供前台的好处,因为每次尝试访问未加载的内容时都会抛出LazyException。这与使用某些DTO非常相似。

希望它有帮助!