簡體   English   中英

將JSF與JPA集成

[英]Integrate JSF with JPA

我對JSF和JPA進行了一些研究。 閱讀一些教程,並遵循一些示例。 在此之前,我將創建托管Bean,模型和服務來處理我的應用程序。

將JPA包含在此模式中的最佳實踐是什么? 是否應在同一Service類中包含JPQL查詢和數據庫調用? 在某些示例中,我看到JPA與Invoke應用程序階段中調用的方法在同一托管Bean中實現,還是在其他托管Bean中實現JPA? 與這兩個一起使用的常見做法是什么?

您應該將JPA訪問權限合並到一種或另一種DAO或服務層中,如果沒有其他原因,您可以將該DAO層存入單元測試中。 然后,所有您的JSF托管bean都會通過該類路由其JPA訪問。 這樣,每當您從JSF托管bean訪問JPA時,就可以模擬單個DAO方法調用,而不是分別模擬EntityManagerQuery等。

現在,更棘手的問題是:DAO /服務層應該是另一個JSF管理的bean,EJB還是其他東西? 從某種意義上講,這比確認要分離JPA訪問要重要。

我個人開始使用@ManagedProperty進行注入,使DAO成為JSF托管的另一種風味。 然后,我在Java EE 6中發現了CDI,並使用@Named / @Inject使其成為POJO。

但是,如果您正在執行寫操作而不是只讀操作,則應考慮在一個單獨的服務層上聲明事務-如果使用JSF, @Stateless EJB可能最有意義。

希望這可以幫助!

我是一名自學者,因此請原諒我的措辭可能不合適。

如果您看到此答案 ,那么將提供指向NetBeans向導的鏈接,該向導用於創建RESTful Web服務。 這肯定超出了您的問題范圍,但是生成的DAO類確實很有幫助,可以用於JSF項目。 如果需要,可以刪除JAX-RS RESTful批注,但其余部分保留。

然后,將自動生成的Facade類(使用EJB注釋)注入Bean中。 在這些Facade和Entity類中,已經編寫了基本JPA查詢。

如果需要創建更復雜的查詢,則還可以使用類型安全的Criteria API代替JPQL。 最初的工作量更大,但是Criteria API允許您以OO方式編寫復雜的查詢,這在某些具體情況下也很有用,例如在“ WHERE”語句中使用多個條件(其編號是像在Advanced Search一樣動態生成的) )。

暫無
暫無

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

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