2011-12-14 84 views
1

Hibernate 4是否對延遲加載進行了改進?Hibernate 4和使用JPA + Spring時的延遲加載的改進

我們使用Hibernate作爲JPA提供程序,並希望保持我們的代碼清理Hibernate特定的東西。我們不想使用Hibernate會話ojbects。在我們的應用程序中,我們也使用Spring和JSF。我們發現有一個OpenSessionInViewFilter和一個OpenSessionInViewInterceptor然而兩者似乎只有在bean處於請求範圍時才起作用。攔截Spring會話範圍(@Scope("session"))似乎不起作用。

其他框架允許豆的weavingenhancement。現在類似的東西可能與Hibernate 4或其他新功能介紹,允許代碼保持休眠特定擴展? (一些配置當然是好的。)

我已經檢查了What's new in Hibernate 4?,看到他們在sessionfactory上工作,但是我不明白它是否有幫助。

+0

春天也允許編織通過AOP。你是否檢查@Transactional註解來定義事務邊界? – 2011-12-14 10:11:27

+0

什麼問題?你想做什麼,你有什麼問題?你的問題是關於延遲加載,然後是關於Spring攔截器,然後是關於編織。這是三個不同的主題。 – 2011-12-14 10:15:42

+0

@JBNizet我希望能夠毫不費力地使用Hibernate延遲加載。我不想在我的代碼中導入任何org.hibernate,並且想知道如果懶惰加載現在可以在hibernate 4中工作,而不需要執行特定於hibernate的代碼。 ViewFilter和ViewInterceptors似乎太有限了。我想代碼反對JPA api,沒有別的。 – 2011-12-14 10:21:40

回答

0

對於除請求範圍之外的其他範圍的LazyLoading,hibernate 4似乎沒有任何改進。

0

Hibernate是一個JPA實現。只需使用JPA API,就可以免除Hibernate特定的代碼。即使直接使用Hibernate API,延遲加載也是使用JPA批註配置的。您不需要任何Hibernate特定的註釋來使用Hibernate的延遲加載。

OpenSessionInView過濾器/攔截器不直接鏈接到延遲加載。它只允許在交易結束後讓會話打開。無論如何,這個過濾器/攔截器不會強制你在你自己的類中使用任何Hibernate特定的代碼,所以我不太明白問題出在哪裏。請注意,Spring也支持JPA(並且Hibernate是一個JPA引擎),並且具有OpenEntityManagerInViewFilter/Interceptor,它與OpenSessionInViewFilter/interceptor發揮相同的作用,但是對於JPA而言。

0

我認爲你不應該在會話範圍內有實體bean。你應該在會話範圍內有值對象,並且如果有必要的話,在請求期間加載相關的實體bean。

您使用Extended PersistenceContexts嗎?

相關問題