Задать вопрос

Почему при удалении строки в Spring Boot с помощью JPA выводит ошибку?

у меня есть таблица admin_productions с колонками [id, adminproductname, adminproducttotal]
Есть Crud репозиторий с таким кодом:
package com.example.beton.repos;
import com.example.beton.domain.AdminProductions;
import org.springframework.data.repository.CrudRepository;

import java.util.List;
public interface AdminProductRepo extends CrudRepository<AdminProductions, Integer> {
    List<AdminProductions> findByAdminproductname(String adminproductname);
    List<AdminProductions> deleteByAdminproductname(String adminproductname);
}

и такой контроллер: (пытался сделать deleteByAdminproductname() и найти по id, удалить и сохранить)
package com.example.beton.controller;

import com.example.beton.domain.AdminProductions;
import com.example.beton.repos.AdminProductRepo;
import com.example.beton.repos.WarehouseRepo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;
import java.util.Map;

@Controller
@PreAuthorize("hasAuthority('ADMIN')")
public class RemoveController {
    @Autowired
    private AdminProductRepo adminProductRepo;
    @Autowired
    private WarehouseRepo warehouseRepo;

    @GetMapping("/removeproduct")
    public String remPage(Map<String, Object> model){
        Iterable<AdminProductions> adminproductions = adminProductRepo.findAll();
        model.put("adminproductions", adminproductions);
        return "removeproduct";
    }

    @PostMapping("/removeproduct")
    public String removeAdminProduct(@RequestParam String removname, Map<String, Object> model){

        List<AdminProductions> rmadm = adminProductRepo.findByAdminproductname(removname);
        for (AdminProductions admrem : rmadm){
            adminProductRepo.deleteById(admrem.getId());
            adminProductRepo.save(admrem);
        }
        Iterable<AdminProductions> adminproductions = adminProductRepo.findAll();
        model.put("adminproductions", adminproductions);
        return "removeproduct";
    }
}


Выводит такую ошибку
5f2824b871dfb688017422.jpeg
  • Вопрос задан
  • 757 просмотров
Подписаться 1 Простой 5 комментариев
Пригласить эксперта
Ответы на вопрос 3
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
Здравствуйте!
То что вы видите 403 ошибку (Forbidden) особо ни о чем не говорит.
1) Если у вас подключен Spring Security, то проверьте может ли пользователь совершить нужный вам запрос. @PreAuthorize("hasAuthority('ADMIN')") Пользователь должен быть админом
2) Проверьте правильно ли вы обрабатываете post || get запрос.
3) В этом участке кода тоже ошибка. Вы сперва удаляете admrem, а потом пытаетесь сохранить удаленный admrem.
for (AdminProductions admrem : rmadm){
            adminProductRepo.deleteById(admrem.getId());
            adminProductRepo.save(admrem);
        }


Скорее всего это лишнее
adminProductRepo.save(admrem);

4) Тут тоже может быть проблема. Например, в camelCase.
deleteByAdminproductname()
Потому, что у вас сущность называется AdminProduct и поле name
А структура запроса у вас:
Adminproductname
Тоже что-то не так...

Ну в конце концов, поставьте точки остановки, включите дебаг и посмотрите какая ошибка прибегает на сервер. Может быть у вас запрос даже не доходит до контроллера из-за ошибки в Spring Security
Ответ написан
blrmyfc
@blrmyfc Автор вопроса
5f2875e1b5a04911235911.jpeg
Вот с этого участка не работает))
Ответ написан
Комментировать
xez
@xez Куратор тега Java
TL Junior Roo
В логах, которые вы предоставили написано:
javax.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process 'remove' call


Это значит, что пора разбираться с транзакциями.
Почитайте, например:
https://habr.com/ru/company/otus/blog/431508/
akorsa.ru/2016/08/kak-na-samom-dele-rabotaet-trans...

У Eugen Paraschiv можно подсмотреть примеры:
https://www.baeldung.com/transaction-configuration...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы