簡體   English   中英

沒有外部持久性提供程序,我可以使用JPA嗎?

[英]Can I use JPA without an external persistence provider?

我試圖使用JPA與Spring MVC,mySql。 我從這里了解JPA和Hibernate有什么區別? JPA可以單獨使用,但是大多數Web資源都將其描述為僅需要實現的規范。 那么我可以在沒有EclipseLink,Hibernate等持久性提供程序的情況下使用JPA,如果是,那么如何?

就像您剛才所說的,JPA只是一組規范。 您不能使用規范,只能使用那些規范的實現,為此,您需要持久性提供(如Hibernate或EclipseLink ...)來實現JPA規范。

如果沒有提供程序,則無法使用JPA。 您可能要做的是僅在應用程序中使用JPA的標准功能,以使持久性提供程序易於交換(理論上)。 在這種情況下,客戶端代碼將僅直接使用JPA接口和注釋。

另一種方法是使用持久性提供程序的專有功能來擴展JPA。 例如,您可以將持久性提供程序的專有注釋與標准JPA注釋相結合,以實現優化。 在這種情況下,客戶端代碼直接依賴於持久性提供程序API。

實際上,編寫100%標准的JPA代碼可能很困難。 我不知道其他持久性提供程序,但是Hibernate允許使用EntityManager中的某些專有功能。

// Non-standard use of an HQL implicit select clause
Query query = em.createQuery("from Entity where ids in (:ids)");

// Non-standard use of a collection parameter in a native query
// Collection parameters are only standard for JPQL queries
Query query = em.createNativeQuery("select id from Table where id in (:ids)")
        .setParameter("ids", listOfIds);

而且沒有考慮每個持久性提供程序如何與數據庫交互。

暫無
暫無

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

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