当前位置: 首页 > 知识库问答 >
问题:

删除方法在Spring Boot&Thymeleaf中不起作用

云俊美
2023-03-14
@Autowired
UserRepository userRepository;

@RequestMapping(value = "/students", method = RequestMethod.GET)
public String tables(Model model){
    model.addAttribute("users", userRepository.findAll());
    return "students";
}


@RequestMapping(value = "/delete/{id}", method = GET)
public String delete(Model model, @PathVariable("id") Long id){
    User user = userRepository.findById(id)
        .orElseThrow(() -> new IllegalArgumentException("Niepoprawne id : " + id));
    userRepository.deleteUserById(id);
    model.addAttribute("students", userRepository.findAll());
    return "redirect:/students";
}}
@Repository
public interface UserRepository extends JpaRepository<User,Long> {
    User findByEmail(String email);
    List<User> findAll();
   void deleteUserById(Long id);

}
@Service
public interface UserService extends UserDetailsService {

    User findByEmail(String email);
    User save(UserRegistrationDto registration);
    List<User> findAll();
    void deleteUserById(Long id);

}

和UserServiceImpl:

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;

    @Autowired
    private RoleRepository roleRepository;

    @Autowired
    private BCryptPasswordEncoder passwordEncoder;


    public User findByEmail(String email){
        return userRepository.findByEmail(email);
    }


    private Collection<? extends GrantedAuthority> mapRolesToAuthorities(Collection<Role> roles){
        return roles.stream()
            .map(role -> new SimpleGrantedAuthority(role.getName()))
            .collect(Collectors.toList());
    }

    public List<User> findAll(){
       return userRepository.findAll();
    }


    public void deleteUserById(Long id) {
        userRepository.deleteUserById(id);
    }
}

在前端,我创建了一个简单的表,如下所示:

<table class="table table-bordered" id="dataTable" width="100%" cellspacing="0" >
                            <thead>
                            <tr>
                                <th>IMIE</th>
                                <th>NAZWISKO</th>
                                <th>EMAIL</th>
                                <th>AKCJA</th>
                            </tr>
                            </thead>
                            <tbody>
                            <tr>
                            <tr th:each="user :${users}">
                                <td th:text="${user.firstName}"></td>
                                <td th:text="${user.lastName}"></td>
                                <td th:text="${user.email}"></td>
                                <td>
                                    <!--<a th:href="${'/students/delete/' + user.id}" class="btn btn-danger">Usuń</a>-->
                                <td><a th:href="@{/delete/{id}(id=${user.id})}">Delete</a></td>
                                </td>
                            </tr>
                            </tr>
                            </tbody>
                        </table>

现在,当我启动我的应用程序并单击删除按钮时,我在网站上出现了这样的错误:当前线程没有实际事务可用的EntityManager-不能可靠地处理“Remove”调用;嵌套异常是javax.persistence.TransactionRequiredException:当前线程没有实际事务可用的EntityManager-不能可靠地处理“Remove”调用

共有1个答案

桑坚成
2023-03-14

默认情况下,只有CRUD方法(CrudRepository方法)标记为事务性的。如果使用的是自定义查询方法,则应该用@transactional注释显式标记它。

因此,将@Transactional放在存储库类中的deleteUserById方法上,如下所示。

@Transactional
void deleteUserById(Long id);

参考这个

 类似资料:
  • 我用编写的代码: 我的: 和错误: 未捕获(promise中)错误:在xmlHttpRequest.HandleError(xhr.js:87)的createError(createError.js:16)处出现网络错误 谁来帮帮我?

  • 这里是我试图实现的BST,但是remove方法不会删除具有给定值的节点。我试着这样做: 首先检查当前节点(我要删除的节点)是否有正确的子节点。 1.2.1)如果右子节点有一个左子节点,则我将当前节点替换为最小节点,该最小节点大于当前节点,并替换为右子树中最左侧的节点 1.2.2)如果没有,我就用它的正确子节点替换当前节点,但是代码没有删除选中的节点,哪里出错了?

  • 问题内容: 我正在尝试从名为user_enrole的表中删除所有记录。 我认为查询的语法没有错,但这给了我错误提示 #1064-您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册,以在第1行的’* FROM user_enrole’附近使用正确的语法 我已经仔细检查了我的语法,但我无法找出问题出在哪里,请有人指出。 是由于该表与使用表之间的关系而发生的还是什么? 问题答案: 您无需在删

  • 我正在使用spring boot(后端)和angulars js(前端),以及使用restful web服务在两个前端之间进行通信。这是我的Rest服务: 这是我的函数angulars js: 但是当点击删除按钮时,我得到了这个错误: 不支持DELETE方法????

  • 我的自定义方言与处理器不解析任何值,我不知道为什么。在生成的视图中,${Content}应该在的地方没有任何东西,在将标签更改为th: text后,它会出现。我使用Spring Boot v1.5.9。发布,Springv4.3.13。发布 pom.xml依赖(它的子模块) LineSeparator处理器。JAVA 我的方言。JAVA 胸腺onfiguration.java 看法html

  • 本文向大家介绍SpringBoot中的Thymeleaf用法,包括了SpringBoot中的Thymeleaf用法的使用技巧和注意事项,需要的朋友参考一下 Thymeleaf Thymeleaf是最近SpringBoot推荐支持的模板框架,官网在thymeleaf.org这里。 我们为什么要用Thymeleaf来作为模板引擎呢?官网给了我们一个非常令人信服的解释: Thymeleaf is a m