我正在使用CDI会话作用域,Seam管理扩展持久化上下文(PC)。这提供了对PC的更精细控制并避免了LIE。我正在使用CDI Beans而不是EJB Bean。在页面中,我检索实体列表并在表格中显示它们。表中选定的实体记录绑定到表单,可以编辑但不能保留,直到单击“保存”按钮。在这个地方出现问题,因为所有实体都被管理,当我尝试在保存操作中只刷新/提交一个当前实体时,编辑的实体也会被持久化。解决此类问题的首选最佳做法是什么。我应该在被管实体和被查看/编辑过的实体之间使用中间POJO吗?我应该分离然后合并(保存之前)当前正在进行的实体吗?有什么建议?
JPA 2.0,Hibernate 4.x
Seam 3(焊接CDI,持久性,交易,面向模块)
JSF 2.1
Java EE 6。
答案 0 :(得分:3)
我们使用了类似的方法,但是使用了EJB3 bean而没有Seam持久化上下文。不过,也许我们的经验对您有用。
这个想法是:
extended
PersistenceContext
分离实体会杀死将实体提供给前端的好处,因为每次尝试访问未加载的内容时都会抛出LazyException
。这与使用一些DTO完全一样。
希望它有所帮助!
答案 1 :(得分:2)
如果我理解正确,那么:
我认为这里的正确方法是在编辑对象时分离对象,然后在保存时重新附加对象(通过合并)。这样就可以保留内存中未保存的更改。
您实际上并不需要扩展的持久性上下文,因为您需要在请求之间保留的任何对象都将被分离。
答案 2 :(得分:0)
我在前端使用Primefaces,默认情况下是ajax提交对实体所做的更改。在管理Primefaces组件后问题就消失了。