2012-03-24 31 views
0

我有這樣定義的Customer類:JPA,避免加載實體每次協會走過

@Entity 
public class Customer { 
    //... 
    @OneToMany(mappedBy = "customer", orphanRemoval = true, FetchType.EAGER) 
    @MapKey(name = "name") 
    private Map<String, Operation> operationMap = new HashMap<String, Operation>(); 

我的GUI應用程序通過一個EJB檢索該客戶,然後更新客戶和/或它的操作。問題是,無論何時遍歷operationMap集合,都會創建Operation實體的新代理,這會爲GUI組件創建問題。有些仍然綁定到舊的代理,而有些則綁定到新的代理。

你打算如何解決這個問題?嘗試遍歷operationMap只有一次?有沒有辦法限制新代理的創建?

我正在使用EclipseLink JPA(Glassfish AS)。

+0

我遠離JPA的專家,但不是它應該只存在任何實體的副本(如果它從多個線程中加載好幾次,那麼ORM緩存應該返回相同的對象)? – SJuan76 2012-03-24 21:13:36

+0

謝謝,你實際上指出我正確的方式。一種偶然調用的方法即使在初始頁面加載之後也提取了Customer實體,因此每次創建新的分離的Customer實體。 – Dario 2012-03-24 21:24:09

回答

0

這實際上是我管理的bean中的一個錯誤。一種偶然調用的方法即使在初始頁面加載之後也提取Customer實體,因此每次創建新的分離的實體。