【问题标题】:Can I use JPA without an external persistence provider?我可以在没有外部持久性提供程序的情况下使用 JPA 吗?
【发布时间】:2014-02-22 19:22:29
【问题描述】:

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

【问题讨论】:

  • 反对票是怎么回事?

标签: java mysql jpa persistence


【解决方案1】:

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

【讨论】:

    【解决方案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);
    

    这还没有考虑每个持久性提供程序与数据库的交互方式。

    【讨论】:

    • 谢谢,正是我想要的。
    猜你喜欢
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多