Spring Boot:@Entity注解是否存在?

14
我看了这个Spring Boot教程:https://javabrains.io/courses/spring_bootquickstart/lessons/Creating-a-Spring-Data-JPA-Repository,它在类名前面加上了@Entity注释。但是当我在我的代码中尝试这样做时,我收到了一个错误提示:“无法解析@Entity”。
这是我的pom.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.3.RELEASE</version>
        <relativePath/><!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>


    <dependencies>

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

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

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

        <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derby</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

你知道问题出在哪里吗?

你是否已经包含了Spring和持久化API的所有库? - Sandeep Kokate
是的,我编辑了原帖。您可以看到所有的依赖项。 - CrazySynthax
它通过spring-boot-starter-data-jpa在中转过程中被拉取。 - AchillesVan
1
可能是重复问题:javax.persistence.Entity不存在 - Jeanne Boyarsky
有关MAVEN更新问题,请查看以下链接:https://dev59.com/DX4QtIcB2Jgan1znxPHV#75246439 - PROFESSOR
18个回答

19
我最近也遇到了这个问题。对我来说,spring-boot-starter-data-jpa依赖项出了问题。虽然它在pom.xml文件中没有任何错误,但是在类路径中没有jar - 即使在不同的方式下多次同步maven和导入依赖项(mvn clean/update/install)后。
<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

我使用的IDE是IntelliJ Idea。

最终对我有用的方法:我只需将此依赖项放在<dependencies>...</dependencies>标签中所有其他依赖项之上,即仅更改依赖项顺序并进行同步。这在我的情况下有效,不确定为什么。

以下是我pom.xml文件的内容供参考。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>dev.sanskar.courses</groupId>
<artifactId>course-api</artifactId>
<version>1.0-SNAPSHOT</version>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.3.RELEASE</version>
</parent>

<dependencies>

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

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


    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>


    <!-- https://mvnrepository.com/artifact/javax.persistence/javax.persistence-api -->
    <dependency>
        <groupId>javax.persistence</groupId>
        <artifactId>javax.persistence-api</artifactId>
        <version>2.2</version>
    </dependency>


    <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator -->
    <!-- https://mvnrepository.com/artifact/org.hibernate.javax.persistence/hibernate-jpa-2.1-api -->
    <!-- https://mvnrepository.com/artifact/org.hibernate.javax.persistence/hibernate-jpa-2.1-api -->
    <!-- https://mvnrepository.com/artifact/javax.persistence/persistence-api -->


</dependencies>

<properties> 
    <java.version>1.8</java.version>
</properties>


<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>


有人能解释一下为什么这个有效吗?这对我也起作用了。但我想了解其中的问题和这个修复工作的原因。 - SHILPA AR

11
使用spring-boot-starter-data-jpa。
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-jpa</artifactId> 
</dependency>

对我来说正常运作... :)

不要使用以下内容

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

为什么不使用另一个? - Cat-Lord

4

我添加了这个依赖

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

添加此代码以实现功能。


2

当设置不正确时,Spring STS通常会显示此错误。

  1. 转到包含错误的行
  2. 单击警报灯泡,以便它可以建议可能的修复方法
  3. 从选项中选择“修复项目设置”

按照其余步骤,使项目重新对齐导入顺序。


Translated:

1
在我的情况下,将spring-boot-starter-data-jpa依赖项添加到类路径中即可解决问题。

1
我遇到了同样的问题。在我配置了新的依赖关系后,由于这些依赖关系未找到,@Entity注释未被发现。为了解决这个问题,IntelliJ IDE建议我加载Maven更改。在pom.xml屏幕上,单击图标重新加载Maven。

1

上次对我有用的是:

  1. 转到文件 -> 项目结构 -> 模块 -> 单击您的项目名称
  2. 然后进入依赖项,单击“+”,然后 -> 库 -> 来自Maven
  3. 然后搜索javax.persistence.api,然后单击确定并应用更改

1
假设您错过了一个依赖项。
<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

在这个github 页面中有一些有用的spring boot示例项目。浏览一下会很有帮助。


但我没有错过它。它在那里。 - CrazySynthax
是的,假设你是正确的。尝试添加Maven插件。确保你有import javax.persistence.Entity - Rajith Pemabandu
1
当我写 'import javax.persistence.Entity' 时,我会收到一个错误:'无法解析 Entity'。很可能是因为我的 IDE 无法识别 javax.persistence 中的 Entity。 - CrazySynthax

0
这里的大多数答案都是“试错类型”,并没有解释为什么@Entity注释不起作用,以及在添加某些依赖项后为什么开始起作用。
以下是它的工作原理-
要使用持久性注释,您需要添加相关依赖项及其版本,假设我们添加spring-boot-starter-data-jpa如下-
  <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-data-jpa</artifactId>
         <version>2.6.6</version>
      </dependency>

现在当您使用Intellij Idea作为IDE时,您需要重新加载Maven项目以从您的pom.xml中重新读取依赖项。

一旦您这样做了,@Entity注释就可以使用了。


0

我最近也遇到了同样的问题,但是通过添加下面给出的依赖项来解决了它。我认为Spring Boot版本的更改导致了这个错误,现在javax.persistence不再可用,我们可以使用jakarta.persistence代替。

        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>6.1.6.Final</version>
        <type>pom</type>
        </dependency>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接