簡體   English   中英

使用純JPA和Spring打開會話 - 而不是Hibernate會話

[英]Open Session in View with Pure JPA and Spring - not Hibernate Session

我正在創建一個使用JPA進行數據訪問的Java EE應用程序。 最初我使用的是EclipseLink,但它依賴於Moxy的捆綁的Geronimo Javamail實現給了我一些奇怪的問題,我無法強迫它使用Sun Javamail,所以我已經切換到Hiberate作為JPA提供者。

EclipseLink忽略了懶惰/急切的注釋,它急切地加載了所有東西。 Hibernate關注那些注釋,因此不會加載依賴對象。 這意味着,如果我加載說一個人,加上父人的延遲加載,如果我在視圖中訪問父母並不是懶惰加載,我得到一個例外,說數據庫會話已關閉。

我知道有兩種方法可以解決這個問題: - 在View模式/反模式中打開Session(從分層的角度來看這不是很好,並且可以有N + 1數據庫調用問題,但很容易) - 有服務加載視圖所需的所有數據的方法(這使得服務層混亂,有許多重復的方法來獲取不同數量的數據)

作為參考,我的圖層是視圖 - >控制器 - >服務 - >實體對象 - > JPA。 我沒有dto,因為它是一個小應用程序,我不喜歡DTO反模式。

考慮到View模式中的Open Session,問題是OpenSessionInViewInterceptor和OpenSessionInViewFilter都是特定於Hibernate的,並且都要求你在Spring配置文件上聲明一個hiberate會話。 我更喜歡使用純JPA,配置了persistence.xml文件。

我有什么選擇? 我可以只更改我的Spring配置以顯式加載Hibernate,然后在我的應用程序中使用純JPA嗎? 是否有純粹的JPA方式實現相同的結果,從視圖延遲加載?

  • 聽起來很奇怪,EclipseLink忽略了標准的JPA注釋。
  • javamail實現不應與JPA有任何關聯
  • OpenEntityManagerInViewX (過濾器/攔截器),它處理JPA的相同場景
  • 如果你明智地聲明和使用你的收藏,你可以很容易地沒有這種模式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM