簡體   English   中英

Spring Boot如何處理休眠會話?

[英]How Spring Boot Handle Hibernate Session?

我看到使用Spring Boot,您不需要打開和關閉休眠會話。

但是出於理解的目的,它如何在內部工作,它在哪一層打開休眠會話以及何時關閉休眠會話。

我創建了一個POC。 我有一個Spring Boot應用程序,它有兩個實體,一個是Customer ,另一個是AddressCustomerAddress之間存在一對多關系。

我有兩個Apis,一個正在添加記錄,另一個正在獲取所有記錄。 這些APis在CustomerEndpoint中,並帶有注釋

@RestController
@RequestMapping(value="/customer").

並且還創建了CustomerRepository ,它擴展了CrudRepository以保存和獲取Customer記錄。

所以按我的理解,同時利用獲取客戶CustomerRepositoryCustomerEndpoint類應該拋出惰性初始模式錯誤時,我們會說customer.getAddress (其fetchtype是懶惰)。 但是它沒有引發任何錯誤,它工作正常。

我以為休眠會話不在CustomerEndpoint類中。

誰能幫我通過Spring Boot維護這個Hibernate會話嗎?

由於每個人都認為它是另一個問題的重復,但是我的問題並不是他們的解釋的首要內容,因為按照他們的說法,在存儲庫之前會話是有效的,因此我應該在我在CustomerEndpoint中說出customer.getAddress時獲得LazyInitialization異常,因為這不是一個存儲庫,但是我沒有任何異常

首先,在Presentation layer使用Repository layer不是一個好習慣。

在Spring Boot中默認啟用OSIV (在視圖中打開會話),從性能和可伸縮性的角度來看, OSIV實際上不是一個好主意。

因此,您不會遇到異常,無法在表示層中工作。 通過將以下內容放在application.properties文件中進行檢查

spring.jpa.open-in-view=false

您可以參考OSIV AntiPattern以獲得更多詳細信息

我認為,如果您的customer.getAddress在事務內,它仍然有效

暫無
暫無

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

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