1. SqlSession Synchronization Not Active
日志信息:
Creating a new SqlSession SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@41c44cd8] was not registered for synchronization because synchronization is not active
说明: 这条信息表你创建了一个新的 SqlSession,但是它没有被注册为同步事务。通常这是由于 Spring 的事务管理没有正确配置。
解决方案: 确保你的 MyBatis 和 Spring 的配置是正确的。检查你的配置文件,确保事务管理器已经正确配置,并且你正在使用 @Transactional 注解来管理事务。
2. ClassCastException: Employee cannot be cast to Long
ERROR 16660 --- [nio-8080-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.ClassCastException: class com.itheima.reggie.entity.Employee cannot be cast to class java.lang.Long]
说明: 这个错误表明你在 EmployeeController.save() 方法中,尝试将 Employee 对象强制转换为 Long 类型,导致了 ClassCastException。
getAttribute("employee"): 通过会话对象获取名为 "employee" 的属性。这个属性通常是在用户登录时存储的,代表当前登录用户的信息(如用户 ID)
3.解决方法:
只要改一下以下代码,上面两个问题就解决了。
如果你能成功地从会话中获取 Employee 对象,并且这个对象包含正确的 ID,表明你对事务的管理更为恰当,因此能正常创建和管理 SqlSession。
Object emp = request.getSession().getAttribute("employee");
Long empId = ((Employee) emp).getId();
System.out.println("当前用户id"+empId);

被折叠的 条评论
为什么被折叠?



