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

时间:2014-01-30 13:05:03

标签: java mysql jpa persistence

我正在尝试将JPA与Spring MVC,mySql一起使用。我从这里What's the difference between JPA and Hibernate?了解到JPA可以独立使用,但是大多数网络资源都将其描述为只是一个规范,我需要一个实现。 那么我可以在没有EclipseLink,Hibernate等持久性提供程序的情况下使用JPA,如果是,那么How?

2 个答案:

答案 0 :(得分:5)

就像你刚才说的那样,JPA只是一套规范。您不能使用这些规范,只能使用这些规范的实现,为此您需要提供类似Hibernate或EclipseLink的持久性...它实现了JPA规范。

答案 1 :(得分:2)

如果没有提供商,则无法使用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);

而且没有考虑每个持久性提供程序如何与数据库交互。