【问题标题】:The import javax.persistence cannot be resolved导入 javax.persistence 无法解析
【发布时间】:2013-03-24 12:03:36
【问题描述】:

我目前正在处理一个需要 javax.persistence 包中的 EntityManager EntityManagerFacotry 和 Persistence 的项目。它似乎是针对数据库服务的,但当前代码的文档记录不是很好。通过搜索谷歌,似乎应该有一个 xml 文件随之而来,但也没有一个。我想我的问题只是如何让这些未解决的导入消失?我是否必须在构建路径中添加另一个 jar?看来我不应该这样做,因为它从 1.5 开始就已经存在了。

非常感谢任何帮助。

【问题讨论】:

  • 您确实需要一个带有 JPA API 的 jar 文件。但更重要的是,您需要实现这些 JPA 接口(Hibernate、EclipseLink、OPenJPA 等)。坦率地说,在不知道 JPA 是什么以及选择了哪种实现的情况下尝试使用 JPA 肯定会导致灾难。如果你继承代码,它至少应该带有一个构建过程。
  • 有趣的@JB Nizet,我的 Google App Engine 集成中出现了这个问题,并按照分步说明进行操作,什么是过时的。集成模块应该是捆绑在一起的,所以 Android App 不必处理细节。没有提到 JPA,有提到 MAVEN 将下载并包含所有依赖的 SDK 文件等。

标签: eclipse persistence


【解决方案1】:

我遇到了同样的问题并意识到,由于我使用的是 spring boot,所以我需要做的就是添加以下依赖项:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

【讨论】:

  • 谢谢,这对我有用
【解决方案2】:

是的,您可能需要添加另一个 jar 或依赖项

javax.persistence.* 是 Java 持久性 API (JPA) 的一部分。它只是一个API,你可以把它想象成一个接口。 JPA 的实现有很多,answer 很好地阐述了每一个,以及使用哪一个。

如果您的javax.persistence.* 导入无法解析,您需要提供实现JPA 的jar。您可以通过手动下载它(并将其添加到您的项目)或通过向依赖管理工具(例如,Ivy/Maven/Gradle)添加声明来做到这一点。有关 Maven 存储库上的 EclipseLink 实现(参考实现),请参阅 here

完成此操作后,您的导入应该会得到解决。

另请参阅here 了解 JPA 的内容。您所指的 xml 可能是 persistence.xml,链接的第 3 页对此进行了说明。

话虽如此,您可能只是指向了错误的目标运行时

如果我没记错的话,如果您将 JPA 实现部署到 JBoss 等 JavaEE 应用服务器中,则不需要提供 JPA 实现。请参阅here“请注意,在 Java EE 6 应用程序服务器(例如 JBoss AS 6)中部署应用程序时通常不需要它。”。尝试更改项目的目标运行时。

如果您的本地项目设置为指向 Tomcat,而您的远程存储库假定为 JavaEE 服务器,则可能是这种情况。 Tomcat 和 JBoss 的区别见here

编辑:我将项目更改为指向 GlassFish 而不是 Tomcat,javax.persistence.* 在没有任何显式 JPA 依赖的情况下解决得很好。

【讨论】:

  • 恕我直言,这是一个更好的答案。
【解决方案3】:

hibernate-distribution-3.6.10.Final\lib\jpa :添加这个 jar 来解决问题。它存在于 lib 文件夹中,您有一个名为 jpa 的文件夹 ---> 里面有 hibernate-jpa-2.0-1.0.1.Final jar

【讨论】:

    【解决方案4】:

    如果有人在使用 Maven,则需要在 POM.XML 文件中添加依赖项。这篇文章的最新版本如下:

    <dependency>
        <groupId>org.hibernate.javax.persistence</groupId>
        <artifactId>hibernate-jpa-2.1-api</artifactId>
        <version>1.0.0.Final</version>
    </dependency>
    

    【讨论】:

      【解决方案5】:

      我通过添加以下依赖解决了这个问题

      <dependency>
          <groupId>javax.persistence</groupId>
          <artifactId>persistence-api</artifactId>
          <version>2.2</version>
      </dependency>
      

      一起

      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-data-jdbc</artifactId>
      </dependency>
      

      【讨论】:

        【解决方案6】:

        如果您将 Gradle 与 spring boot 和 spring JPA 一起使用,则在 build.gradle 文件中添加以下依赖项

        dependencies {
            compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version: '2.1.3.RELEASE'
        } 
        

        【讨论】:

          【解决方案7】:

          我的解决方案是选择我在 pom.xml 中定义的 maven 配置文件,我在其中声明了休眠依赖项。

          CTRL + ALT + P 在日食中。

          在我的项目中,我遇到了这个问题和许多其他问题,因为在我的 pom 中,我有不同的配置文件来支持 Glassfish 3、Glassfish 4 和 WildFly,所以每个容器都有不同版本的 Hibernate 以及不同的 Java 编译目标等等上。选择活动的 Maven 配置文件解决了我的问题。

          【讨论】:

            【解决方案8】:

            如果您使用 Hibernate 作为 JPA 实现并且没有使用 Maven/Gradle,更简单的方法是下载整个包而不是一个一个下载 jar 文件。

            转到http://hibernate.org/orm/downloads/ 并下载最新的库,从required 文件夹中提取jar。

            【讨论】:

              【解决方案9】:

              在较新的 hibernate jar 中,您可以在“hibernate-search-5.8.0.Final\dist\lib\provided\hibernate-jpa-2.1-api-1.0.0.Final”下找到所需的 jpa 文件。您必须将此 jar 文件添加到您的项目 java 构建路径中。这很可能会解决问题。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2016-08-30
                • 1970-01-01
                • 2012-04-04
                • 2013-10-04
                • 1970-01-01
                • 2016-03-12
                • 2018-08-07
                • 2012-11-06
                相关资源
                最近更新 更多