添加JpaRepository后Spring Boot应用无法初始化的问题求助
Spring Boot添加JpaRepository后初始化失败问题解决
问题描述
原本Spring Boot项目运行正常,添加JpaRepository接口后应用无法完成初始化,IDE无语法错误,添加接口前编译运行均正常。
相关代码
实体类Contato.java
package by.lucas.agenda.contatos.modelo; import java.util.Objects; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class Contato { @Id @GeneratedValue(strategy = GenerationType.IDENTITY ) private long id; @Column(nullable = false) private String nome; @Column(nullable = false) private String telefone; @Column(nullable = false) private String email; private String urlAvatar; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getTelefone() { return telefone; } public void setTelefone(String telefone) { this.telefone = telefone; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getUrlAvatar() { return urlAvatar; } public void setUrlAvatar(String urlAvatar) { this.urlAvatar = urlAvatar; } @Override public int hashCode() { return getClass().hashCode(); } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Contato other = (Contato) obj; return id == other.id; } }
Repository接口ContatoRepositorio.java
package by.lucas.agenda.contatos.modelo; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.rest.core.annotation.RepositoryRestResource; @RepositoryRestResource(collectionResourceRel = "contatos", path = "contatos") public interface ContatoRepositorio extends JpaRepository<Contato, Long> { }
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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.0.4</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>by.lucas</groupId> <artifactId>agenda</artifactId> <version>0.0.1-SNAPSHOT</version> <name>agenda</name> <description>Demo project for Spring Boot</description> <properties> <java.version>17</java.version> </properties> <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-data-rest</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>javax.persistence</groupId> <artifactId>persistence-api</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
问题原因及解决方法
核心问题
你使用的是Spring Boot 3.0.4,该版本基于Jakarta EE 9+,所有Java EE相关的包名已经从javax.*迁移到jakarta.*,但你的代码和依赖存在两处冲突:
- 手动添加了
javax.persistence:persistence-api依赖,而spring-boot-starter-data-jpa已经包含了Jakarta版本的JPA API,两者会引发类路径冲突。 - 实体类中使用的是
javax.persistence.*的导入,这和Spring Boot 3.x的Jakarta环境不兼容。
解决步骤
- 移除冲突依赖:删除pom.xml中的以下依赖节点
<dependency> <groupId>javax.persistence</groupId> <artifactId>persistence-api</artifactId> <version>1.0</version> </dependency> - 修正实体类导入:将Contato.java中的所有
javax.persistence开头的导入替换为jakarta.persistence:// 替换前 import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; // 替换后 import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; - 清理并重新构建项目:执行Maven命令
mvn clean install,或者在IDE中执行清理缓存、重新编译的操作,然后启动应用。
内容的提问来源于stack exchange,提问作者Lucas Melo
相关产品推荐
相关产品推荐

