2009-08-17 46 views

回答

2

有幾種方法來實現這一目標:

  • 啓用緩存。雖然SQL不會改變,但Hibernate會比較數據庫的結果並重用現有的對象。這並沒有帶來巨大的推動,但實施和維護起來很簡單。

  • 創建第二個映射(相同的表,不同的對象)只加載一個值的子集。

  • 將很少使用的數據移動到第二個表中。

  • 使用自定義本機SQL查詢加載對象。在這裏,你必須確保你知道已經裝載了多少以及如何「填補空白」。

2

Hibernate的參考文檔有一章Improving Performance。你可以看看你的抓取策略,或者使用緩存是否會提高性能。

更具體地說,您需要提供有關應用程序的更多詳細信息以及如何使用通過ORM加載的對象。

+0

通常情況下,加載相關對象會導致ORM性能受損。您需要根據您需要導致其他抓取的子屬性的可能性來設置抓取策略攻擊。例如,一個person對象檢索Address對象或Orders集合。地址可能需要,所以加載它,但訂單,也許不是,所以不太積極。 – 2009-08-17 12:59:10

0

在yoru實體映射中使用FetchType.LAZY。 即:

@Entity 
public class MyEntity { 

private List<MyAnotherEntity> values; 

@ManyToOne(fetch = FetchType.LAZY) 
public List<MyAnotherEntity> getValues() { 
return values; 
} 


} 

那麼,當您選擇您所需設置,如果你需要你的收藏被映射到對象提取模式的標準實體。

Criteria c = createCreteria(entityManager, MyEntity.class); 
c.setFetchMode("values", FetchMode.JOIN);