JPA延遲加載no Session報(bào)錯(cuò)解決分析
異常展示
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: ****, could not initialize proxy - no Session
at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:582)
at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:201)
at org.hibernate.collection.internal.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:145)
at org.hibernate.collection.internal.PersistentBag.size(PersistentBag.java:261)
問(wèn)題原因
觸發(fā)延遲加載的時(shí)候,session已經(jīng)失效
延遲加載原理
通過(guò)cglib對(duì)目標(biāo)Entity實(shí)現(xiàn)代理,針對(duì)配置了延遲加載的屬性,修改對(duì)應(yīng)get方法的邏輯,植入延遲加載邏輯
解決方式
- 不使用延遲加載
- 延遲加載的時(shí)候session活躍
我們本來(lái)就想使用延遲加載來(lái)提高性能的,不使用延遲加載只是你逃避問(wèn)題的方式??!要用延遲加載的地方必須用它!!
如何讓延遲加載時(shí)session活躍
web項(xiàng)目
在springboot環(huán)境下,打開(kāi)以下配置即可
spring.jpa.open-in-view=true
這個(gè)配置會(huì)通過(guò)WebMvcConfigurer配置一個(gè)OpenEntityManagerInViewInterceptor攔截器
而這個(gè)攔截器的作用。。我們看他的注釋就知道了
就是處理請(qǐng)求的全程都能獲取到EntityManager,其實(shí)就是能獲取到session的意思。
普通提供dubbo服務(wù)的項(xiàng)目
在接口方法上加上@Transactional注解即可。
@Override @Transactional(rollbackFor = Exception.class) public List<XXDTO> getAllXX() { List<XXEntity> result = xXQueryRepository.findAll(); return XXConverter.INSTANCE.entityListToDTOList(result); }
@Transactional會(huì)保證在所注解方法作用域內(nèi)session都生效
以上就是JPA延遲加載no Session報(bào)錯(cuò)解決分析的詳細(xì)內(nèi)容,更多關(guān)于JPA延遲加載no Session報(bào)錯(cuò)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
java MyBatis攔截器Inteceptor詳細(xì)介紹
這篇文章主要介紹了java MyBatis攔截器Inteceptor詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2016-11-11SpringBoot項(xiàng)目運(yùn)行一段時(shí)間后自動(dòng)關(guān)閉的坑及解決
這篇文章主要介紹了SpringBoot項(xiàng)目運(yùn)行一段時(shí)間后自動(dòng)關(guān)閉的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09java中Integer包裝類裝箱的一個(gè)細(xì)節(jié)詳解
Java中的Integer是int的包裝類型,下面這篇文章主要給大家介紹了關(guān)于java中Integer包裝類裝箱的一個(gè)細(xì)節(jié)的相關(guān)資料,文中介紹的這個(gè)細(xì)節(jié)挺重要的,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起看看吧2018-07-07