Я создаю приложение весенней загрузки, как только я запускаю свое приложение, у меня возникает следующая ошибка:
Вызвано: java .lang.NoSuchMethodError: javax.persistence.PersistenceContext.synchronization () Ljavax / persistence / SynchronizationType; в org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor $ PersistenceElement. (PersistenceAnnotationBeanPostProcessor. java: 671) в org.springframework.orm.jpa.support.PersistenceAnnotationAnnotationBean по адресу org.springframework.util.ReflectionUtils.doWithLocalFields (ReflectionUtils. java: 668) по адресу org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.buildPersistenceMetadata (PersistenceAnnotationBeanPostProcessor.buildPersistenceMetadata (PersistenceAnnotationBext). (. PersistenceAnnotationBeanPostProcessor * * тысяча двадцать-семь: 409) .support.PersistenceAnnotationBeanPostProcessor.findPersistenceMetadata на org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessMergedBeanDefinition (. PersistenceAnnotationBeanPostProcessor java: 336) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory .applyMergedBeanDefinitionPostProcessors (AbstractAu TowireCapableBeanFactory. java: 1093) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory. java: 568) ... еще 44 1005 * 100 * 100 *: 568 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>2.3.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>nanosense-usine</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>nanosense-usine</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<!-- test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
<!-- utilities -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
мои файлы:
package com.example.nanosenseusine.controller;
import com.example.nanosenseusine.commons.exceptions.ApiExceptionModel;
import com.example.nanosenseusine.commons.exceptions.RequestExceptions;
import com.example.nanosenseusine.model.dto.AppKeysDtoModel;
import com.example.nanosenseusine.service.AppKeysService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/appKeys")
public class AppKeysController {
public final AppKeysService appKeysService; // service pour appKeys
@Autowired
public AppKeysController(AppKeysService appKeysService) {
this.appKeysService = appKeysService;
}
/**
* écris une A
* @param userBody le modèle à ajouter dans la bdd
* @return l'entité ajoutée par l'utilisateur
*/
@ApiResponses(value = {
@ApiResponse(code = 201, message = "Succès", response = AppKeysDtoModel.class),
@ApiResponse(code = 400, message = "Paramètres invalides", response = ApiExceptionModel.class),
@ApiResponse(code = 500, message = "Erreur interne", response = ApiExceptionModel.class)
})
@PostMapping(consumes = "application/json", produces = "application/json")
public ResponseEntity<AppKeysDtoModel> postAppKey(@RequestBody AppKeysDtoModel userBody)
throws RequestExceptions.Exception400, RequestExceptions.Exception500 {
AppKeysDtoModel body = appKeysService.post(userBody);
return ResponseEntity.status(HttpStatus.CREATED).body(body);
}
}
@Service
@Slf4j
public class AppKeysService {
public final AppKeysConverter converter;
public final AppKeysDao appKeysDao; // pour les opérations sur la bdd
private static final String BAD_USER_REQUEST = "one of more elements in the request are missing";
@Autowired
public AppKeysService(AppKeysConverter converter, AppKeysDao appKeysDao) {
this.converter = converter;
this.appKeysDao = appKeysDao;
}
/**
* ajout d'une AppKey dans la bdd (Lora)
* @param dto les paramètres récupérées dans le body du post
*/
public AppKeysDtoModel post(final AppKeysDtoModel dto) throws RequestExceptions.Exception400, RequestExceptions.Exception500 {
if (dto == null || dto.getModel() == null || dto.getFirmwareVersion() == null) {
throw new RequestExceptions.Exception400(BAD_USER_REQUEST);
}
AppKeysDaoModel entity_to_push = converter.ConvertFromDtoToDaoModel(dto);
// on récupère le dernier element de la bdd pour incrémenter 'AppKey' et 'DevEui' en fonction de l'élement précedent
var last_element = appKeysDao.get_last_element();
if (last_element == null)
last_element = new AppKeysDaoModel();
// on incrémente les valeurs à ajouter dans la bdd
entity_to_push.setAppEui(GlobalClass.APPEUI_DEFAULT);
entity_to_push.setAppKey(BytesOperations.addHexaValue(last_element.getAppKey(), GlobalClass.APPKEY_SHIFT));
entity_to_push.setAppEui(BytesOperations.addHexaValue(last_element.getAppEui(), GlobalClass.APPEUI_SHIFT));
return converter.ConvertFromDaoToDtoModel(appKeysDao.push(entity_to_push)); // récupère la réponse après le post puis le convertis en dto
}
}
package com.example.nanosenseusine.dao;
import com.example.nanosenseusine.model.dao.AppKeysDaoModel;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class AppKeysDao extends BasicDao<AppKeysDaoModel>{
@Override
protected Class<AppKeysDaoModel> getDaoModelClass() {
return AppKeysDaoModel.class;
}
@Override
protected Logger getLogger() {
return log;
}
}
public abstract class BasicDao<T extends BasicDaoModel> {
@PersistenceContext
protected EntityManager entityManager;
/**
* ajoute une entité dans la bdd
* @return l'entité ajoutée
*/
public T push(T entity_to_push){
try {
entityManager.persist(entity_to_push);
return entity_to_push;
} catch (Exception e){
getLogger().error("Persistance error: " + getClass().getName(), e);
throw new RequestExceptions.Exception500();
}
}
public T get_last_element(){
try {
var query = entityManager.createQuery("SELECT d from " + getDaoModelClass().getName() + " d ORDER BY d.id")
.setMaxResults(1).getResultList(); // crée la query
return (query == null)? null : (T) query.get(0);
} catch (ClassCastException e){
getLogger().error("erreur de conversion de classe: " + getClass().getName(), e);
throw new RequestExceptions.Exception500();
}
catch(Exception e){
getLogger().error("Persistance error: " + getClass().getName(), e);
throw new RequestExceptions.Exception500();
}
}
protected abstract Class<T> getDaoModelClass();
protected abstract Logger getLogger();
}
Похоже, проблема является постоянной. В свойствах моего приложения я установил следующие правила:
server.port=8181
## default connection pool
spring.datasource.hikari.connectionTimeout=20000
spring.datasource.hikari.maximumPoolSize=5
## PostgreSQL
spring.datasource.url=jdbc:postgresql://localhost:5432/nanosenseUsine
spring.datasource.username=postgres
spring.datasource.password=postgres
Между прочим, ошибка не появляется, когда я удаляю из своего pom зависимость spring-boot-starter-data-jpa или @PersistenceContext аннотация из BasicDao
Я искал такие ошибки в net, это могло быть из-за проблемы с зависимостью, но я удалил их все и повторно импортировал, но ошибка все равно возникает. Есть ли у кого-нибудь есть идея об этом?