2010-10-27 31 views
2

我剛剛在我的DAO類上配置了@PersistenceContext(type = PersistenceContextType.EXTENDED),以便在視圖圖層上獲得延遲加載(需要獲取它關閉這個會話),但我有1級緩存問題(我想)。因爲對象被緩存,即使我的第二級緩存設置關閉。在關閉「type = PersistenceContextType.EXTENDED」後,我得到了系統沒有緩存對象,但又跳入延遲加載問題。在使用@PersistenceContext時避免1級緩存問題(type = PersistenceContextType.EXTENDED)

//@PersistenceContext(type=PersistenceContextType.EXTENDED)
@PersistenceContext 私人EntityManager的EntityManager的;

有什麼辦法可以控制這個嗎?我真的需要延遲加載,但不希望每次都將對象存儲在1級緩存中。

感謝

+0

噢對不起:我使用hibernate jpa impl – Thiago 2010-10-27 01:11:56

回答

1

除非你真的想用一個擴展持久化上下文,真正明白它的意思(我不是說是迂腐,但是這是一個擴展的實體管理重要有不同的線程,生命週期,並內存管理語義),我的建議是使用通常的OEIV(Open EntityManager in View)模式來解決你的延遲加載問題。

Spring通過篩選器(OpenEntityManagerInViewFilter)和攔截器(OpenEntityManagerInViewInterceptor)提供了此模式的兩種實現。來自javadoc:

針對「視圖中的Open EntityManager」模式,即允許延遲加載web視圖,儘管原始事務已經完成。

+0

哼,它會使我的持久性與請求創建的線程一起存在,不知道它是否會對我造成問題,但可能比PersistenceContextType更好。延長。謝謝 – Thiago 2010-10-27 10:44:36