异常信息:
Exception in thread "main" org.apache.ibatis.cache.CacheException: Error serializing object. Cause: java.io.NotSerializableException: demo.cyj.pojo.Student
at org.apache.ibatis.cache.decorators.SerializedCache.serialize(SerializedCache.java:102)
at org.apache.ibatis.cache.decorators.SerializedCache.putObject(SerializedCache.java:56)
at org.apache.ibatis.cache.decorators.LoggingCache.putObject(LoggingCache.java:51)
at org.apache.ibatis.cache.decorators.SynchronizedCache.putObject(SynchronizedCache.java:45)
at org.apache.ibatis.cache.decorators.TransactionalCache.flushPendingEntries(TransactionalCache.java:122)
at org.apache.ibatis.cache.decorators.TransactionalCache.commit(TransactionalCache.java:105)
at org.apache.ibatis.cache.TransactionalCacheManager.commit(TransactionalCacheManager.java:44)
at org.apache.ibatis.executor.CachingExecutor.close(CachingExecutor.java:61)
at org.apache.ibatis.session.defaults.DefaultSqlSession.close(DefaultSqlSession.java:264)
at demo.cyj.Test.main(Test.java:44)
描述:
今天在做mybatis的二级缓存的demo时,关闭了第一次的sqlSession后,在第二次想要通过SqlSessionFactory里的二级缓存直接查数据时,抛出了这个异常。
原因:
通过读异常信息:org.apache.ibatis.cache.CacheException: Error serializing object. Cause: java.io.NotSerializableException: demo.cyj.pojo.Student at
可以获取一个关键词:serializing,大概就是pojo中的实体类要序列化了,因为使用的是EhCahce缓存组件,有时会将数据缓存到硬盘上,需要可序列化支持的。必须实现java.io.Serializable。
解决:
在相应的实体类上实现一个Serializable接口就OK了。
实现接口
总结:
实体类不管用不用得到序列化,都可以实现序列化,有好处没坏处