您将如何使 JPA 2.1 模块独立于 JPA 实现?

Posted

技术标签:

【中文标题】您将如何使 JPA 2.1 模块独立于 JPA 实现?【英文标题】:How would you make a JPA 2.1 module independent of the JPA implementation? 【发布时间】:2014-04-07 19:49:30 【问题描述】:

我有一些 JPA 模块,其中包括使用 @Index 的实体和一些使用 EntityManagerFactory 等的代码,这些代码目前直接依赖于 OpenJPA。什么是让它独立于 JPA 实现而不限制在 Java 7 中的好方法?

基本上,我正在寻找一些实现中立的 JPA 2.1 规范 jar。有这样的事吗?如果我的意图没有意义,请告诉我原因。

【问题讨论】:

Index 和 EntityManagerFactory 是标准的 JPA 类,而不是专有的 OpenJPA 类。因此,您使用这些类的代码已经独立于 OpenJPA。有什么问题? 它正在访问 openjpa 依赖项中的@Index。我可以修复它,但修复它需要引入与 Java 5 和 6 的不兼容性。我需要一个独立地提供 JPA 2.1 api 实现的非核心库。 您的意思是问题在于您想要一个 jar 文件,它不是 OpenJPA 提供的,并且包含 JPA API 类?如果是这样,这里是:mvnrepository.com/artifact/org.hibernate.javax.persistence/… 【参考方案1】:

我下载了 Oracle 的官方 Java EE 7 SDK 发行版,发现它包含 Glassfish。从http://mvnrepository.com/artifact/javax/javaee-web-api/7.0 我推断(它报告 GLASSFISH 作为问题跟踪器)官方 api 可能最好用以下方式表示:

<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>javax.persistence</artifactId>
    <version>2.1.0</version>
</dependency>

【讨论】:

以上是关于您将如何使 JPA 2.1 模块独立于 JPA 实现?的主要内容,如果未能解决你的问题,请参考以下文章

Spring JPA 多模块项目

单独指定 JPA 实体侦听器,独立于其关联实体

JPA 2.1 - 无法调用 Oracle 函数

您将哪种 Java 类型用于 JPA 集合,为啥?

jpa 2.1 的生产就绪持久性提供程序

JPA:命名查询数据库独立性