![](/img/trans.png)
[英]How to handle database migrations in Spring Boot with Hibernate?
[英]How Spring Boot Handle Hibernate Session?
我看到使用Spring Boot,您不需要打開和關閉休眠會話。
但是出於理解的目的,它如何在內部工作,它在哪一層打開休眠會話以及何時關閉休眠會話。
我創建了一個POC。 我有一個Spring Boot應用程序,它有兩個實體,一個是Customer
,另一個是Address
, Customer
和Address
之間存在一對多關系。
我有兩個Apis,一個正在添加記錄,另一個正在獲取所有記錄。 這些APis在CustomerEndpoint中,並帶有注釋
@RestController
@RequestMapping(value="/customer").
並且還創建了CustomerRepository
,它擴展了CrudRepository
以保存和獲取Customer
記錄。
所以按我的理解,同時利用獲取客戶CustomerRepository
內CustomerEndpoint
類應該拋出惰性初始模式錯誤時,我們會說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.