我正在編寫一個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)中以易於理解的方式找到這些概念。 –