REST @DeleteMapping — Не разрешено создавать транзакцию в общем EntityManager

#spring #rest

#spring #rest

Вопрос:

Когда я использую DELETE в postman по адресу http://localhost:8081/api/data/removedata/1

я получаю ответ на сообщение: «Не разрешено создавать транзакции в общем EntityManager — вместо этого используйте Spring transactions или EJB CMT»,

это код Java

     @DeleteMapping("/removedata/{id}")
    public ResponseEntity deleteData(@PathVariable String id) {
        long remInt = Long.parseLong(id);
        Data dataRem = em.find(Data.class, remInt);
          em.getTransaction().begin();
          em.remove(dataRem);
          em.getTransaction().commit();
        return ResponseEntity.ok(new MessageResponse("Data removed"));
    }
  

Что я делаю не так? ps я новичок, все еще борющийся с основами.

Комментарии:

1. Откуда берется этот em EntityManager? И вам обязательно следует прочитать о поддержке транзакций Spring Framework docs.spring.io/spring/docs/current/spring-framework-reference /…

2. она была создана над @DeleteMapping следующим образом: `@PersistenceContext private EntityManager em; « Однако я решил проблему, забыл добавить @Transactional ^^

Ответ №1:

Эта проблема была решена путем добавления @Transactional следующим образом:

     @Transactional
    @DeleteMapping("/removedata/{id}")
    public ResponseEntity deleteData(@PathVariable String id) {
        long remInt = Long.parseLong(id);
        Data dataRem = em.find(Data.class, remInt);
          em.getTransaction().begin();
          em.remove(dataRem);
          em.getTransaction().commit();
        return ResponseEntity.ok(new MessageResponse("Data removed"));
    }