我正在编写一个JSF 2.0表单来编辑JPA @Entity对象。我有一个支持bean,它有一个EntityManager的get方法,它从EntityManager中获取。到现在为止还挺好。实体的JSF表单 - 热门编辑?
问题是用户正在编辑的实体对象是否被应用程序的其他部分访问?换句话说,如果其他人调用该记录,他们在通过EntityManager将记录合并回数据库之前是否会看到字段更改?或者他们获得不同的实例。
这很重要的原因是用户可以输入各种不良数据。由后台bean完成的验证阶段不会调用merge()所有的错误都被清除,但是之前呢?
如果这是一个常见的情况,我该如何避免这个问题?
感谢您的澄清。如果javadoc提到** getSingleResult()**返回一个分离的实体,那将会很好。我假设** getResultList()**也是如此。 – AlanObject
当实体不再是持久化上下文的一部分时,就会发生实体分离。它通常会在EntityManager离开事务上下文时自动发生,即当事务提交或回滚时,或者当您调用'EntityManager.detach'时显式地自动发生。 'Query.getSingleResult'或'Query.getResultList'将总是返回一个托管实体。当交易结束时,这个被管实体变成一个分离的实体。 –
您将在[OpenEJB概念指南](http://openejb.apache.org/3.0/jpa-concepts.html)中以易于理解的方式找到这些概念。 –