我在JEE是新的,最近開始學習Spring和Hibernate。我正在嘗試開發RESTful服務來跟蹤具有類別的項目。我有多對多的關聯(一個項目可以有多個類別,一個類別可以有多個項目),三個表格:項目,類別和連接表格item_category。Hibernate的許多一對多延遲初始化例外
我使用MySQL服務器,春天引導1.3.1和Hibernate 4.3
我想現在要做的是讓類別和類別與產品清單的產品清單。我用API編寫了完整的應用程序,並以LazyInitializationException結束。我嘗試了很多方法,但沒有幫助。 (我可以設置獲取類型EAGER,但這不是一個解決方案)。
例如,這是API列出的所有項目:GET /api/item
,這是輸出:(!沒有預期):
產生的原因:org.hibernate.LazyInitializationException:未能懶洋洋>初始化角色的集合:com.sk.itemlist.domain.Item.categories,無法初始化代理 - 在org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:575)無會話 〜[休眠核心-4.3.10.Final.jar:4.3.10.Final] at org.hibernate.collection.int ernal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:214)〜[hibernate-core-4.3.10.Final.jar:4.3.10.Final] at org.hibernate.collection.internal.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java: 155)〜[冬眠核-4.3.10.Final.jar:4.3.10.Final] 在org.hibernate.collection.internal.PersistentSet.size(PersistentSet.java:160)〜[冬眠核-4.3。 10.Final.jar:4.3.10.Final] 在com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:101)〜[傑克遜數據綁定-2.6.5.jar:2.6。 5] 在com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:24)〜[傑克遜數據綁定-2.6.5.jar:2.6.5] 在com.fasterxml.jackson。 databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:693)〜[jackson-da tabind-2.6.5.jar:2.6.5] 在com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:675)〜[傑克遜數據綁定-2.6.5.jar:2.6。 5]
,如果你試圖通過ID來獲得所有類別GET /api/category
或類別相同的錯誤GET /api/category/1
因此,這裏是我的問題:
- 如何擺脫LazyInitializationException中的?我如何配置休眠以重新打開會話?或者我應該在DAO層初始化集合?
- 我讀了關於DTO模式,我不完全理解它是什麼,我應該在這裏深入挖掘?
- 當我嘗試向項目中插入數據時,我發現問題。它僅插入到項目表中,連接表和類別爲空。我手動將數據添加到數據庫進行測試
- 您對整個應用程序的感覺如何?我能在這裏提高或者我應該避免(如果有的話)
最後,我在這裏上傳完整的項目:https://gitlab.com/sksh/ItemList.git
在資源,你可以找到數據庫轉儲用一些隨機數據。使用有效的數據庫憑證更新application.properties。
是'CategoryDaoImpl.java'中的'public Category findByKey(String key)'是你試圖調用哪個方法給你這個異常? –
@Rdx它將它引發到處,findById,listAll等。自從我在「類別」中添加項目列表後,它開始拋出。 – costello
GET/api/category拋出org.hibernate.LazyInitializationException:無法懶惰地初始化一個角色集合:com.sk.itemlist.domain.Category.items,無法初始化代理 - 否會話,反之亦然,如果我試圖獲取所有項目(GET/API /項目),但在這種情況下,它不能初始化類別 – costello