我正在尝试将一个 participantRepository 接口(实现 CrudRepository)添加到我的 spring 启动应用程序中。但是此接口的基本代码在运行时会给出一个错误,指出必须更正应用程序的类路径。我该怎么做,我是否可以进行其他修改以正确运行代码?
参与者类
package com.example.spring2.participants;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.util.List;
@Entity
public class Participant {
@Id
private String name;
private int age;
private String job;
@Autowired
private ParticipentService participentService;
public Participant() {
}
public Participant(String name, int age, String job) {
this.name = name;
this.age = age;
this.job = job;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
}
//参与者控制器类
package com.example.spring2.participants;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
public class ParticipantController {
@Autowired
private ParticipentService participentService;
@RequestMapping("/people")
public List<Participant> viewPeople(){
return participentService.getParticipants();
}
@RequestMapping("/people/{name}")
public Participant getAParticipant(@PathVariable String name) {
return participentService.getAParticipant(name);
}
@RequestMapping(method = RequestMethod.POST, value = "/people")
public void addParticipant(@RequestBody Participant participant){
participentService.addParticipant(participant);
}
@RequestMapping(method = RequestMethod.PUT, value = "/people/{name}")
public void updateParticipant(@RequestBody Participant participant, @PathVariable String name) {
participentService.updateParticipant(participant, name);
}
@RequestMapping(method = RequestMethod.DELETE, value = "/people/{name}")
public void deleteParticipant(@PathVariable String name) {
participentService.deleteParticipant(name);
}
}
参与者服务类
package com.example.spring2.participants;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.List;
@Service
public class ParticipentService {
private List<Participant> participantList = Arrays.asList(
new Participant("yasas", 23, "Student"),
new Participant("anu", 28, "accountant"),
new Participant("banu", 26, "teacher")
);
@Autowired
private ParticipantRepository participantRepositoty;
public List<Participant> getParticipants(){
return participantList;
}
public void addParticipant(Participant participant) {
participantList.add(participant);
}
public void updateParticipant(Participant participant, String name ){
for (int i=0; i < participantList.size(); i++){
Participant p = participantList.get(i);
if (p.getName().equals(name)){
participantList.set(i, participant);
return;
}
}
}
public void deleteParticipant(String name ){
for (int i=0; i < participantList.size(); i++){
Participant p = participantList.get(i);
if (p.getName().equals(name)){
participantList.remove(p);
}
}
}
public Participant getAParticipant(String name) {
for (int i=0; i < participantList.size(); i++){
Participant p = participantList.get(i);
if (p.getName().equals(name)){
return p;
}
}
return null;
}
}
聚球.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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>spring2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring2</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</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-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>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
我希望服务器在应用程序运行时启动。但它给出了以下错误。
Description:
An attempt was made to call the method javax.persistence.PersistenceContext.synchronization()Ljavax/persistence/SynchronizationType; but it does not exist. Its class, javax.persistence.PersistenceContext, is available from the following locations:
jar:file:/C:/Users/Asus/.m2/repository/org/hibernate/javax/persistence/hibernate-jpa-2.0-api/1.0.1.Final/hibernate-jpa-2.0-api-1.0.1.Final.jar!/javax/persistence/PersistenceContext.class
jar:file:/C:/Users/Asus/.m2/repository/org/hibernate/javax/persistence/hibernate-jpa-2.1-api/1.0.0.Final/hibernate-jpa-2.1-api-1.0.0.Final.jar!/javax/persistence/PersistenceContext.class
It was loaded from the following location:
file:/C:/Users/Asus/.m2/repository/org/hibernate/javax/persistence/hibernate-jpa-2.0-api/1.0.1.Final/hibernate-jpa-2.0-api-1.0.1.Final.jar
Action:
Correct the classpath of your application so that it contains a single, compatible version of javax.persistence.PersistenceContext
存储库中删除该目录休眠,然后进行maven clean install
以正确重新导入依赖项。如果它仍然不能解决您的问题,请maven tree:dependency
检测导入 Hibernate-JPA-2.0-API 并将其排除在您的 pom
有 4 个步骤可以做到这一点:
-
您必须找到要删除的依赖项的位置,在我认为是否要删除hibernate-jpa-2.0-api-1.0.1.Final中.jar
mvn dependency:tree
-
找到位置后,必须对依赖项进行排除,以加载不需要的依赖项,例如
<dependency> ... <exclusions> <exclusion> <groupId>org.hibernate.javax.persistence</groupId> <artifactId>hibernate-jpa-2.0-api</artifactId> <version>1.0.1.Final</version> </exclusion> </exclusions> </dependency>
-
就我而言,我清理了我的项目,例如
mvn clean
-
您可以验证它是否已存在
mvn dependency:tree | grep hibernate-jpa-2.0-api
只需检查依赖树 从项目依赖列表中删除 jar 从依赖项中删除 jar
尝试转到 .m2 文件夹下加载依赖项的位置,并删除特定文件夹 hibernate-jpa-2.0-api
删除文件夹后,请尝试执行maven全新安装。
生成项目并再次运行它。
之所以发生,是因为有两个版本
hibernate-jpa-2.0-api/1.0.0.Final
/hibernate-jpa-2.0-api-1.0.1.Final.jar
hibernate-jpa-2.0-api/1.0.1.Final
/hibernate-jpa-2.0-api-1.0.1.Final.jar
并且它应该只包含一个兼容的javax.persistence.PersistenceContext版本