2012-06-11 37 views
1

我需要一次顯示大約1300個角色的大表。 (我知道我應該使用數據滾動,但我的用戶希望一次看到整個表格。)該表格顯示4列。其中兩列來自對象,但另外兩列來自原始對象中的引用對象。我需要找到最好的/有效的方式來做到這一點。我目前有這個工作,但是當我重新加載表時,它給出了內存不足的錯誤。我認爲這是由內存中大量的冗餘數據造成的。JPA和JSF數據表優化

  1. 創建一個視圖對象,倉庫將只填寫所需的字段。
  2. 其他建議。

這裏有對象:

public class Database extends EntityObject { 
     private Long id; 
     private String name; 
     private String connectionString; 
     private String username; 
     private String password; 
     private String description; 

     // getter and setters omitted 
    } 

    public class Application extends EntityObject { 
     private Long id; 
     private String name; 
     private String fullName = ""; 
     private String description; 
     private Database database; 
     private List<Role> roles = new ArrayList<Role>(0); 

     // getter and setters omitted 
    } 

    public class Role extends EntityObject { 
     private Long id; 
     private String name; 
     private String nameOnDatabase; 
     private Application application; 

     // getter and setters omitted 
    } 

什麼,我需要從角色的列表中顯示爲:

role.id,role.name,role.application.name,role.application .database.name

回答

1

要明智地進行優化,請定義您將如何處理數據,查看或/和編輯。下面是一些常見的場景

  1. Retrieval using lazy fetch type。 使用FetchType.LAZY批註在應用程序中標記您的角色。

  2. Retrieval using multiselect query。創建您的自定義類(如DTO)並使用多選查詢從數據庫填充數據。 (類似視圖映射爲實體)

還有其他的可能性,如Shared (L2) Entity CacheRetrieval by Refresh

看看你是否正確使用EntityManager閱讀Am I supposed to call EntityManager.clear() often to avoid memory leaks?

+0

爲什麼OP要延遲加載? OP的加載「角色」,「應用程序」和「數據庫」。 – siebz0r

+0

檢索到的角色將加載應用程序,這將加載列表熱切。既然您正在從數據庫中檢索所有角色,我不確定hibernate是否會自動在持久性上下文中查找已檢索的角色。 – JMelnik

+0

集合在默認情況下根據我的知識獲取。 – siebz0r