2011-01-14 47 views
1
@ManyToOne 
@JoinColumn(name = "play_template_id", table = "team_play_mapping") 
public Play getPlay() { 
    return play; 
} 

public void setPlay(Play play) { 
    this.play = play; 
} 

默認情況下,這是渴望加載。我可以得到它,以便它可以從緩存中讀取播放對象而不會進行延遲加載?我正確的說,急切的加載會迫使它做一個連接查詢,因此沒有緩存?我可以緩存一個ManyToOne hibernate對象,而不會被加載嗎?

+0

從哪個緩存? L1,L2? – Bozho 2012-10-25 13:23:36

回答

2

預加載和延遲加載是獲取策略。這意味着如果您指定了「熱切」加載,它將盡可能少地執行查詢,而如果指定「懶惰」,它將盡可能多地發佈該對象的查詢(冒着執行更多查詢的風險)。因此,如果您希望從緩存中檢索某些內容,則需要延遲加載策略,即:除非必要,否則不要從數據庫中檢索。

但是,您可以嘗試的是應用基於哪個代碼執行查詢的某個獲取配置文件。例如,在代碼的某個時刻,您的查詢知道最好先加載Play,稍後您會知道延遲加載Play會更好。

http://docs.jboss.org/hibernate/core/3.5/reference/en/html/performance.html#performance-fetching-profiles

+0

有沒有辦法在應用程序中同時使用JPA註釋(我們使用)和xml配置文件規範? – Andrew 2011-01-16 00:45:25

相關問題