项目中使用的JCache缓存实体,发现每次缓存时存进去了实体,取出的时候字段有些是空的。

具体环境为

Springboot v2.01

JCache(ehcache 3.4.0)

jdk 1.8.0_201

maven 3.6.0

最开始以为是取的时候无法取出父类的字段(实体继承了一个父类,空的字段都是父类的字段,所以定位到取的问题)。

 @MappedSuperclass
 @Data
 //@Entity
 public class AlertRuleSuperBean {
     /**
      * 报警规则主键
      */
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Column(name = "alert_rule_id")
     protected Integer alertRuleId;
 }

决定手动赋值

 @Service
 @EnableCaching
 public class CacheServiceImpl implements CacheService {

     @Override
     @Cacheable(key = "#key",cacheNames = "dtuRule")
     public AlertRuleProjectBean doDtuRule(String key, AlertRuleProjectBean bean) {
         System.out.println("I am a doDtuRule!key is "+ key);
         //只缓存子类bug,所以手动赋值
         AlertRuleProjectBean resultBean=new AlertRuleProjectBean();
         resultBean.setDtuEventTimestamp(bean.getDtuEventTimestamp());
         resultBean.setProjectId(bean.getProjectId());
         resultBean.setAlertRuleMax(bean.getAlertRuleMax());
         resultBean.setAlertRule(bean.getAlertRule());
         resultBean.setAlertRuleStatus(bean.getAlertRuleStatus());
         resultBean.setAlertRuleMin(bean.getAlertRuleMin());
         resultBean.setDtu_data_id(bean.getDtu_data_id());
         resultBean.setAlertConditionType(bean.getAlertConditionType());
         resultBean.setAlertPriority(bean.getAlertPriority());
         resultBean.setAlertRuleId(bean.getAlertRuleId());
         resultBean.setAlertRuleName(bean.getAlertRuleName());
         resultBean.setSmoothTime(bean.getSmoothTime());
         resultBean.setAlertType(bean.getAlertType());
         resultBean.setIsProjectUserVisual(bean.getIsProjectUserVisual());
         resultBean.setRuleStatus(bean.getRuleStatus());
         resultBean.setTimestamp(bean.getTimestamp());
         return resultBean;
     }

     @Override
     @CacheEvict(key="#key",condition = "#key!='mfb'",cacheNames = "dtuRule",allEntries = false)
     public void removeDtuRule(String key) {
         System.out.println("cache removed!key is "+key);

     }
 }

赋值后仍然是部分为空,完全没有效果!

试着取消继承(将继承的一些父类字段手动copy到子类,取消extend),问题解决!

JCache只缓存部分字段的更多相关文章

  1. http缓存策略-nginx只缓存js和css不缓存html

    使用缓存,是提升web性能最重要的方式之一. 在开发单页面应用的时候,大量的单静态资源引用都是依赖于html这个文件的.例如: <!doctype html> <html lang= ...

  2. Newtonsoft.Json 序列化 排除指定字段或只序列化指定字段

    using Newtonsoft.Json; using Newtonsoft.Json.Serialization; using System; using System.Collections.G ...

  3. Mybatis-Plus中使用max、sum聚合函数、只查询指定字段、查询语句多个OR处理

    聚合函数查询 可以使用以下方法 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.select(" I ...

  4. EF 只更新部分字段

    /// 只更新storedAddress数据中的DefaultAddress字段,更新为false /// 将默认地址改为不是默认地址 /// </summary> /// <par ...

  5. jsp隐藏关键 敏感信息,只显示前后字段

    今天写jsp页面,要求对字段中间部分隐藏,只显示前几位和后几位.搜了一下发现网上大都是隐藏前面指定字段,或者是利用正则表达式隐藏手机号或是身份证.这样的话必须预先知道字段长度,而我不想知道长度只显示前 ...

  6. 如何 distinct 只对一个字段有用,同时查出其他字段

    转至:http://blog.csdn.net/u013402772/article/details/51262524 在使用MySQL时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有d ...

  7. hibernate update 只更新部分字段的3种方法(转载)

    hibernate 中如果直接使用 Session.update(Object o); 会把这个表中的所有字段更新一遍. 比如: public class Teacher Test { @Test p ...

  8. hibernate update 只更新部分字段的3种方法(其实我只想说第二种)

    hibernate 中如果直接使用Session.update(Object o);会把这个表中的所有字段更新一遍. 比如: public class Teacher Test { @Test pub ...

  9. Laravel 在 with 查询中只查询个别字段

    在使用 Laravel 的关联查询中,我们经常使用 with 方法来避免 N+1 查询,但是 with 会将目标关联的所有字段全部查询出来,对于有强迫症的我们来说,当然是不允许的. 这时候我们可以使用 ...

随机推荐

  1. 线性二次型调节器LQR/LQC算法解析及求解器代码(matlab)

    参考链接:http://120.52.51.14/stanford.edu/class/ee363/lectures/dlqr.pdf 本文参考讲义中的第20页PPT,根据Hamilton-Jacob ...

  2. 文件 "c:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\ttt.mdf" 已压缩,但未驻留在只读数据库或文件组中。必须将此文件解压缩。 CREATE DATABASE 失败。无法创建列出的某些文件名。请查看相关错误。 (.Net SqlClient Data Provider)

    问题: 文件 "c:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\ttt.mdf" 已压缩,但 ...

  3. 使用 dom4j 处理 xml (1)

    解决问题需要,自己简单学习了一下dom4j 的基本用法: (1)读取 xml 文件: (2)修改 xml 文件. 需要的 jar 包: dom4j-xxx.jar (可以在 https://dom4j ...

  4. 【SparkStreaming学习之三】 SparkStreaming和kafka整合

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 scala-2.10.4(依赖jdk1.8) spark ...

  5. 第一个Python游戏窗口

    不废话,撸起袖子就是干. import pygame import sys pygame.init(); caption=pygame.display.set_caption("Python ...

  6. Maven不能下载SNAPSHOT包但是能下载RELEASE包的解决办法

    在使用过程中,Maven默认配置是不能下载SNAPSHOT包的,这是基于一种代码稳定性进行考量得出的结论.引入SNAPSHOT包最大的问题就是,由于SNAPSHOT允许重复上传,所以引用一个这样的包开 ...

  7. ssm框架搭建的基本配置(一站式教会你搭建)

    首先是需要的jar包: <dependency> <groupId>org.springframework</groupId> <artifactId> ...

  8. zigbee 安全通信加密链接密钥

    ---恢复内容开始--- #define KEY_TYPE_TC_MASTER  0        // Trust Center Master Key信任中心主密钥#define KEY_TYPE_ ...

  9. Java集合类学习笔记2

    二,具体的集合 集合类型 描述 ArrayList 一种可以动态增长和缩减的索引序列 LinkedList 一种可以在任何位置进行高效地插入和删除操作的有序序列 ArrayDeque 一种用循环数组实 ...

  10. 2017-12-26--mysql(5.6.15),linux下安装使用

    本文档的目的是,指导使用者安装.配置.还原所需要用到的mysql数据库.仅提供linux版本服务器的安装说明,且linux版本为64位的Centos6.4.同时,会提供的mysql安装包(MySQL- ...