SqlSession Synchronization Not Active+ ClassCastException: Employee cannot be cast to Long

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值