Spring Cache常见问题解决

目录

一 报错:Null key returned for cache operation

二 报错:类型转换异常

三 取出的数据为null


一 报错:Null key returned for cache operation

这里报错有两种情况:

第一,如果你在新增的方法上使用Cacheable注解,那么肯定是会报这个错误的。

因为Cacheable注解的原理是先根据key去Redis查看有没有这个缓存数据 , 如果没有在保存。

那么问题就出现了 , 我们传入的新增的参数肯定是不会带有主键id的,那么此时他根据id去查找key,而你的id是null,他就会报这个错误。

解决办法:

换成CachePut注解,因为这个注解不会先去查找,而是直接添加到缓存中,所以就不存在这个情况。

第二,使用的是CachePut,但还是报这个错误。

这个情况,肯定是因为你使用的是xxxDTO来接收前端的参数,而不是直接使用xxx的实体类来接受,这样就导致一个问题,就是前端传来的参数主键id肯定一开始也是null , 二主键的回显是在调用的mapper层之后才生成的,而错就错在,你是用xxx实体类对象来接收回显的主键,而不是xxxDTO这个参数对象,那么当整个方法执行完后,xxxDTO这个参数的id一直都是null,而注解是这样的:

@CachePut(cacheNames = "dishCache" , key = "#dishDTO.id")

他是根据xxxDTO来获取id的,所以会报key为null。

解决办法:

当然,我们肯定不能直接换成实体类来接收前端传来的参数,因为毕竟可能有些属性实体类没有需要我们使用xxxDTO来接收。所以我们可以在主键回显后,  把主键赋值给xxxDTO就可以了,具体代码如下:

     /*为什么这里要多此一举给参数dishDTO赋值id呢?因为上面在使用springCache需要从dishDTO获取id生成key,但是dishDTO中的参数在这个方法执行完一直都是null , 主键回显只会回显在dish对象中的id。所以springCache得不到id就会报错 , 所以需要给dishDTO的id赋值。*/dishDTO.setId(dish.getId());

二 报错:类型转换异常

这个问题一定是因为你存入数据的注解和取出数据的注解放在不一样的层的方法上。

最常见的是,你把CachePut方法放在Controller层的方法上,那么你存入的数据肯定是一个Result类型的数据。而你把Cacheable注解方法Server层方法上,那么该方法返回的肯定是一个xxx实体类,这就会导致,你存入的数据是一个Result类,而你需要取的数据又变成了xxx实体类,从而导致报错。

解决办法:

你可以全部放在Server层,或者全部放在Controller,只要确保你存入数据的方法的返回数据类型和你取出方法的返回数据类型一致就可以。 

三 取出的数据为null

这个不用看,一定是因为你存入缓存的注解放在了一个返回为void的方法上面。

你只需要记住,springCache的注解,他的存入和取出的数据的类型一定是根据你的方法的返回值来的。如果你的返回值类型是void,那么他存入缓存的数据就是null,所以你取出来肯定也是null。 

演示代码如下;

 @CachePut(cacheNames = "dishCache" , key = "#dishDTO.id")@Overridepublic void addDish(DishDTO dishDTO) {
//        向菜品表插入数据Dish dish = new Dish();BeanUtils.copyProperties(dishDTO , dish);dishMapper.addDish(dish);
//        因为下面的菜品口味表需要使用到菜品的id,所以这里菜品完成后,需要获取菜品id,再赋值给菜品口味Long dishId = dish.getId(); //但是这个id不能直接得到,需要在sql中使用主键回显,才能把生成的主键返回/*再根据菜品id,新增菜品口味表*/
//        取出集合数据List<DishFlavor> flavors = dishDTO.getFlavors();if (flavors!=null && flavors.size()>0){
//            这里需要遍历集合中每一个dishFlavor对象,把dishId赋值给他们flavors.forEach(dishFlavor -> {dishFlavor.setDishId(dishId);});dishFlavorMapper.addDishFlavor(flavors) ;}/*为什么这里要多此一举给参数dishDTO赋值id呢?因为上面在使用springCache需要从dishDTO获取id生成key,但是dishDTO中的参数在这个方法执行完一直都是null , 主键回显只会回显在dish对象中的id。所以springCache得不到id就会报错 , 所以需要给dishDTO的id赋值。*/dishDTO.setId(dish.getId());}

 取出的值如下:

解决方法:

把方法的返回值类型由viod改成对应的需要存储的数据的实体类型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/35184.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

绝望中迎来曙光,阿里大模型算法岗 Offer 突然来了!

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、算法项目落地经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 总结链接如…

用定时器T1中断控制两个LED以不同周期闪烁

#include<reg51.h> // 包含51单片机寄存器定义的头文件 sbit D1P2^0; //将D1位定义为P2.0引脚 sbit D2P2^1; //将D2位定义为P2.1引脚 unsigned char Countor1; //设置全局变量&#xff0c;储存定时器T1中断次数 unsigned char Countor2; //设置全局变量&#xff0c;储…

virutalBox安装debian并配置docker环境

下载镜像 https://gemmei.ftp.acc.umu.se/debian-cd/current/amd64/iso-cd/debian-12.5.0-amd64-netinst.iso 虚拟机安装 如何在Virtual Box 上安装Debian系统_virtual box debian iso netinst-CSDN博客 启动命令行模式 如何设置Debian图形启动或命令行界面启动&#xff1…

什么是Cookie?有什么用?如何清除浏览器中的Cookie?

互联网上的每一次点击和每一个选择都可能被一种名为Cookie的技术记录下来。但Cookie是什么&#xff1f;我们在网站上登录时&#xff0c;为什么经常会被问及是否接受Cookie&#xff1f;接受Cookie登录会不会影响我们的在线隐私&#xff1f; Cookie是什么&#xff1f; Cookie是一…

S-Clustr(影子集群)V3 高并发,去中心化,多节点控制

S-Clustr 项目地址:https://github.com/MartinxMax/S-Clustr/releases/tag/S-Clustr-V3.0 Maptnh Не ограничивайте свои действия виртуальным миром. GitHub: Maptnh Jay Steinberg Man kann die Menschen, die man hasst, in d…

体育赛事翻译欧洲杯足球翻译术语分享

欧洲杯又称欧洲足球锦标赛&#xff0c;是世界上受欢迎和具影响力的国际体育赛事之一&#xff0c;有关足球翻译的术语分享如下&#xff1a; penalty mark (点球)罚球点,midfielder 前卫,center forward 中锋 full back 后卫,bicycle kick / overhead kick 倒钩球,chest-high ba…

如何用Vue3打造一个交互式数据统计仪表盘

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 代码相关技术博客 1. 代码应用场景介绍 本代码示例展示了一个用于展示统计数据的仪表盘界面。它适用于需要可视化跟踪和分析各种指标的应用程序&#xff0c;例如财务管理、健康监测和商业智能。 2. 代码基本…

机器学习-保存模型并根据模型进行预测 python demo

文章目录 前言机器学习-保存模型&#xff0c;根据模型进行预测python demo1. 将我们创建的线性回归模型保存到本地2. 利用我们保存的模型进行房价预测 demo2. 利用我们保存的模型生成对应的预测线性图 demo 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评…

国密SSL证书提升网络安全

随着数字化时代的到来&#xff0c;网络安全已经成为全球关注的焦点。在这种背景下&#xff0c;SSL证书作为保护数据传输安全的重要工具&#xff0c;其重要性日益凸显。 数字证书产品有以下几种类别&#xff1a; 单域名SSL证书&#xff1a;为单一网站提供安全保护。 多域名SS…

【PyTorch函数解析】einsum的用法示例

一、前言 einsum 是一个非常强大的函数&#xff0c;用于执行张量&#xff08;Tensor&#xff09;运算。它的名称来源于爱因斯坦求和约定&#xff08;Einstein summation convention&#xff09;&#xff0c;在PyTorch中&#xff0c;einsum 可以方便地进行多维数组的操作和计算…

DWC USB2.0协议学习1--产品概述

本章开始学习记录DWC_otg控制器&#xff08;新思USB2.0&#xff09;的特点、功能和应用。 新思USB 2.0 IP主要有两个文档需要参考&#xff1a; 《DesignWare Cores USB 2.0 Hi-Speed On-TheGo (OTG) Data book》 《DesignWare Cores USB 2.0 Hi-Speed On-TheGo (OTG) Progra…

解决IMX6ULL GPIO扩展板PWM7/8中的pwm0/period后卡死问题

前言 本篇文章主要是记录解决百问网论坛上面设置 IMX6ULL GPIO扩展板PWM7/8中的pwm0/period后卡死问题&#xff0c;如下图&#xff1a; 一、查看原理图&#xff0c;找出对应引脚 在这里我们如何确定哪个扩展口中的引脚输出PWM波呢&#xff1f;我们可以通过查看原理图。 查看…

作业6.20

1.已知网址www.hqyj.com截取出网址的每一个部分(要求&#xff0c;该网址不能存入文件中) 2.将配置桥接网络的过程整理成文档&#xff0c;发csdn 步骤i&#xff1a;在虚拟机设置中启用桥接模式 1. 打开VMware虚拟机软件。 2. 选择您想要配置的虚拟机&#xff0c;点击菜单栏中的“…

C++ 基础:指针和引用浅谈

指针 基本概念 在C中&#xff0c;指针是存储其他变量的内存地址的变量。 我们在程序中声明的每个变量在内存中都有一个关联的位置&#xff0c;我们称之为变量的内存地址。 如果我们的程序中有一个变量 var&#xff0c;那么&var 返回它的内存地址。 int main() {int var…

北大医院副院长李建平:用AI解决临床心肌缺血预测的难点、卡点和痛点

2024年6月14日&#xff0c;第六届北京智源大会在中关村展示中心开幕&#xff0c;海内外的专家学者围绕人工智能关键技术路径和应用场景&#xff0c;展开了精彩演讲与尖峰对话。在「智慧医疗和生物系统&#xff1a;影像、功能与仿真」论坛上&#xff0c;北京大学第一医院副院长、…

java复习宝典,jdbc与mysql数据库

一.java 1.面向对象知识 (1)类和对象 类&#xff1a;若干具有相同属性和行为的对象的群体或者抽象&#xff0c;类是创建对象的模板&#xff0c;由属性和行为两部分组成。 类是对象的概括或者抽象&#xff0c;对象是类的实例化。 举例&#xff1a;例如车有很多类型&#xf…

计算机系统基础知识(下)

嵌入式系统以及软件 嵌入式系统是为了特定应用而专门构建且将信息处理过程和物理过程紧密结合为一体的专用计算机系统&#xff0c;这个系统目前以涵盖军事&#xff0c;自动化&#xff0c;医疗&#xff0c;通信&#xff0c;工业控制&#xff0c;交通运输等各个应用领域&#xff…

【Matlab 六自由度机器人】机器人动力学之推导拉格朗日方程(附MATLAB机器人动力学拉格朗日方程推导代码)

【Matlab 六自由度机器人】机器人动力学概述 近期更新前言正文一、拉格朗日方程的推导1. 单自由度系统2. 单连杆机械臂系统3. 双连杆机械臂系统 二、MATLAB实例推导1. 机器人模型的建立2. 动力学代码 总结参考文献 近期更新 【汇总】 【Matlab 六自由度机器人】系列文章汇总 …

JVM专题十:JVM中的垃圾回收机制

在JVM专题九&#xff1a;JVM分代知识点梳理中&#xff0c;我们主要介绍了JVM为什么采用分代算法&#xff0c;以及相关的概念&#xff0c;本篇我们将详细拆分各个算法。 垃圾回收的概念 垃圾回收&#xff08;Garbage Collection&#xff0c;GC&#xff09;确实是计算机编程中的…

【自然语言处理系列】探索NLP:使用Spacy进行分词、分句、词性标注和命名实体识别,并以《傲慢与偏见》与全球恐怖活动两个实例文本进行分析

本文深入探讨了scaPy库在文本分析和数据可视化方面的应用。首先&#xff0c;我们通过简单的文本处理任务&#xff0c;如分词和分句&#xff0c;来展示scaPy的基本功能。接着&#xff0c;我们利用scaPy的命名实体识别和词性标注功能&#xff0c;分析了Jane Austen的经典小说《傲…