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);