我是JPA和多層體系結構編碼方式的新手。我正在製作一個新項目,我們正在製作一個API,其中使用DAO層來使用JPQL與數據庫進行通信。JPA - DAO層的延遲初始化
目前,我已經寫JPQL語句從數據庫中獲取數據。除此之外,我還執行延遲初始化來檢索複雜對象。我想知道在DAO層中執行延遲初始化是否正確。
我有前2層以上稱爲發動機層和在那裏我有數據庫連接活性,並且可以有執行延遲初始化以及EJB層DAO層。我想知道這是否是一種很好的體系結構方式,因爲我希望與DAO層相關的數據庫相關聯。
但同樣,我陷在其中,我認爲自己在說爲什麼沒有做延遲初始化在EJB /引擎層一個很好的方式,因爲我有數據庫連接積極進行DB操作的點。我正在考慮這種方式,因爲我只能檢索DAO層中可以重用的必要數據,並且可以根據不同類的需要執行延遲初始化。
我不知道爲什麼我有引擎數據庫連接有源和EJB層(我希望這是對事務管理)。它發現它是根據建築師的建議完成的,我將EJB定義爲無狀態,並且我的引擎級別類在其範圍內具有數據庫連接。
對不起,冗長的問題。希望我已經提供了必要的細節來回答這個問題。
P.S.請給我建議任何好的書或文章,這將幫助我決定哪一層負責理想地執行什麼任務。
由於懶惰初始化的一點是要推遲實體的裝載,直至需要它們,我認爲將是做在最高層的,你仍然有'Session'或'Transaction'範圍(EJB在你的情況)。將它們加載到你的DAO中總會做到這一點,不管你是否真的需要它們,或者沒有達到懶惰的目的。我的$ 0.02。 – kjsebastian
感謝回覆@conscells它可以在EJB層做數據庫檢索,當我們有DAO層專門做到這一點? – user1901761
如果你使用Hibernate,它就像'Hibernate.initialize(parent.getChildRelation())'一樣簡單。所以像'if(userRequestedChild){Hibernate.initialize(...); } return parent;在我看來,在EJB層中可以做。 – kjsebastian