ehcache:Null key returned for cache operation问题解决方法
前言
今天一个上线许久的系统突然无法新增
证书,但是不是所有都不允许新增,只是编号重复的无法新增。从逻辑
上想,我是设置了编号重复判断
,但是该业务判断逻辑未生效,从缓存
上将,会不会是id=null
导致的问题。
报错详情:
java.lang.IllegalArgumentException: Null key returned for cache operation (maybe you are using named params on classes without debug info?) Builder[public java.lang.Object com.egag.cert.controller.CertCompanyController.save(com.egag.cert.entity.CertCompany)] caches=[cache-certCompany] | key='#certCompany.certId' | keyGenerator='' | cacheManager='' | cacheResolver='' | condition='',false,falseat org.springframework.cache.interceptor.CacheAspectSupport.generateKey(CacheAspectSupport.java:578)at org.springframework.cache.interceptor.CacheAspectSupport.performCacheEvict(CacheAspectSupport.java:492)at org.springframework.cache.interceptor.CacheAspectSupport.processCacheEvicts(CacheAspectSupport.java:476)at org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:433)at org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:345)at org.springframework.cache.interceptor.CacheInterceptor.invoke(CacheInterceptor.java:61)
检查思路
报错信息非常清晰,首先是缓存报错
,另一方面是发生在新增的情况(id = null / 0)
且编号重复
的情况,编辑旧的数据则不会影响。
public class EhCacheUtil {public static final String CACHE_NAME_CERT_COMPANY="cache-certCompany";public static final String CACHE_NAME_CERT_COMPANY_LIST="cache-certCompanyList";public static final String CACHE_KEY_CERT_COMPANY_OBJ="#certCompany.certId";public static final String CACHE_KEY_CERT_COMPANY_ID="#id";//省略其他
}
思来想去莫非是新增的对象在缓存中判断不严谨,因为我们重点在于更新旧的数据,新的数据查询的时候自己加载到缓存就可以了。于是我们需要增加一个condition
的参数。
/*** 新增或编辑*/@PostMapping("/save")@CacheEvict(value = EhCacheUtil.CACHE_NAME_CERT_COMPANY, key = EhCacheUtil.CACHE_KEY_CERT_COMPANY_OBJ)public Object save(@RequestBody CertCompany certCompany){log.info("certCompany:"+JSON.toJSONString(certCompany));CertCompany oldCertCompany = certCompanyMapper.selectOne(new QueryWrapper<CertCompany>().eq("cert_id",certCompany.getCertId()));certCompany.setUpdateTime(new Date());if(oldCertCompany!=null){certCompanyMapper.updateById(certCompany);}else{if(certCompanyMapper.selectOne(new QueryWrapper<CertCompany>().eq("cert_number",certCompany.getCertNumber()))!=null){return ReturnT.ERROR("保存失败,名字重复");}//创建MiniCodecertCompanyMapper.insert(certCompany);}//省略部分业务逻辑//清空列表缓存cacheService.cleanCompanyListByPageLimit();return ReturnT.SUCCESS("保存成功");}
解决方案
public class EhCacheUtil {public static final String CACHE_NAME_CERT_COMPANY="cache-certCompany";public static final String CACHE_NAME_CERT_COMPANY_LIST="cache-certCompanyList";public static final String CACHE_KEY_CERT_COMPANY_OBJ="#certCompany.certId";//zhengkai.blog.csdn.net 新增以解决Null key returned for cache operation问题public static final String CACHE_KEY_CERT_COMPANY_OBJ_NOTNULL="#certCompany.certId !=null ";public static final String CACHE_KEY_CERT_COMPANY_ID="#id";//省略其他
}
/*** 新增或编辑*/@PostMapping("/save")@CacheEvict(value = EhCacheUtil.CACHE_NAME_CERT_COMPANY, key = EhCacheUtil.CACHE_KEY_CERT_COMPANY_OBJ,condition = EhCacheUtil.CACHE_KEY_CERT_COMPANY_OBJ_NOTNULL)public Object save(@RequestBody CertCompany certCompany){//省略业务逻辑}
ehcache:Null key returned for cache operation问题解决方法相关推荐
- android getChildAt(index)返回null问题解决方法
android getChildAt(index)返回null问题解决方法 参考文章: (1)android getChildAt(index)返回null问题解决方法 (2)https://www. ...
- Java was started but returned exit code=13 问题解决
Java was started but returned exit code=13 问题解决 参考文章: (1)Java was started but returned exit code=13 ...
- 关于Clipboard剪切板获取值为NULL问题解决方法
关于Clipboard剪切板获取值为NULL问题解决方法 参考文章: (1)关于Clipboard剪切板获取值为NULL问题解决方法 (2)https://www.cnblogs.com/machen ...
- Spring Tool Suite(STS)启动时出现错误:Java was started but returned exit code=13问题解决
Spring Tool Suite(STS)启动时出现错误:Java was started but returned exit code=13问题解决 参考文章: (1)Spring Tool Su ...
- SpringBoot集成Redis报non null key required(已解决)
SpringBoot集成Redis报non null key required(已解决) 注意是不是给的key值或传过来的值是不是空的,如果是空的就会报这个错 接下来将流程走下去: 1.创建Sprin ...
- 解决Null key for a Map not allowed in JSON (use a converting NullKeySerializer?)
我们在写程序的时候提示警告或者报错: Null key for a Map not allowed in JSON (use a converting NullKeySerializer?) 或者 o ...
- Oracle 常见错误总结(如:ORA-XXXXX)及问题解决方法
转: Oracle 常见错误总结(如:ORA-XXXXX)及问题解决方法 ORA-00001: 违反唯一约束条件 ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 O ...
- mysql c 中文字符串_MySQL字符集中文乱码终极解决方案和mysql查询中文问题解决方法...
开源数据库MySQL从来都是中小企业构建web应用的首选,特别是和PHP配合简直就是一 对黄金搭档,深受web开发人员的喜爱.但自从4.1以来MySQL加入了多字符集的支持,很多MySQL使用者发现中 ...
- Field 'id' doesn't have a default value问题解决方法
Field 'id' doesn't have a default value问题解决方法 突然想温习温习对数据库的读写,于是就用mysql建了一张单独的表(见代码1),用Hibernate写了个应用 ...
- java setmethod_Java Operation.setJavaMethod方法代码示例
import com.sun.tools.internal.ws.processor.model.Operation; //导入方法依赖的package包/类 private void createJ ...
最新文章
- 信息安全的一些东西,初步查询了解!
- 前端二十七:四彩边框
- python 使用win32com 操作excel
- 主线程等待线程池所有任务完成
- 并查集:P1196 [NOI2002] 银河英雄传说
- STM32 - 高级定时器的设定 - 基础-05 - 输出波形控制 -Complementary outputs and dead-time insertion 相位调整@互补输出和死区控制
- Java 面试之线程与锁
- android 服务是什么问题,Android Studio 中的Service问题
- android8.0于与ios,android 8.0 oreo抄袭苹果吗 android oreo和ios 11对比
- Linux文件类型及颜色标识整理
- 【学堂在线数据挖掘:理论方法笔记】第二天(3.18)
- 25条实用简洁的Python代码
- 案例:仿小米logo过渡渐变效果
- 拨号保护,网络电话,保护隐私,匿名通话
- csgo/5e机器码解封方法,永久性解除,重装系统都不掉
- 根据三个点的坐标计算三角形面积
- 任意重循环(循环阶数不定、循环层数不定)
- 字节跳动2018校招前端面试题
- python数据清洗笔记
- 磁共振t1t2信号记忆顺口溜_MRI的T1和T2