项目中使用的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. angular4实战开发问题——ngclass不起作用

    由于路由机制会导致页面不刷新. 在项目中,很多都是使用click做的路由跳转.ngclass有时候会不起作用, 这个时候我是很盲目的,一开始在考虑是不是书写的问题.ngclass需要有特定的格式?第一 ...

  2. centos6.5 MySQL数据库的安装

    <div id="home"><div id="header"> <div id="blogTitle"> ...

  3. Go语言代码规范指导

    本规范旨在为日常Go项目开发提供一个代码的规范指导,方便团队形成一个统一的代码风格,提高代码的可读性,规范性和统一性.本规范将从命名规范,注释规范,代码风格和 Go 语言提供的常用的工具这几个方面做一 ...

  4. 牛客OI周赛7-提高组 A 小睿睿的等式

    链接:https://ac.nowcoder.com/acm/contest/371/A来源:牛客网 小睿睿在游戏开始时有n根火柴棒,他想知道能摆成形如“A+B=n”的等式且使用的火柴棒数也恰好等于n ...

  5. 【记录】VMware解决网络找不到服务器的问题

    本想在虚拟机上的Linux上练习安装Mysql8.0版本的,网络连不上的问题卡了N天简直 1. 点击虚拟机右键设置,虚拟机默认设置为NAT模式,这里无需修改. 2. 点击编辑,虚拟网络设置,勾选主机连 ...

  6. 输入时间参数获取rds备份集信息

    1.脚本 [root@localhost tmp]# more geturl_test.py #!/usr/bin/env python #coding=utf- import os, json, u ...

  7. linux系统ansible一键完成三大服务器基础配置(剧本)

    ansible自动化管理剧本方式一键完成三大服务器基础配置 环境准备:五台服务器:管理机m01:172.16.1.61,两台web服务器172.16.1.7,172.16.1.8,nfs存储服务器17 ...

  8. 02_计算机网络的OSI七层(应表会传网数物)

    七层: 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 五层: 应用层 传输层 网络层 数据链路层 物理层 四层: 应用层 传输层 网络层 数据接口层 一.物理层(Physical Lay ...

  9. Oracle基础知识点——Oracle服务端和客户端

    Oracle服务端 服务端提供oracle服务的实例,其是数据库的核心,用于数据库的管理,对象的管理与存储.数据的存储.查询.数据库资源的监控.监听等一些服务. 例子:比如一台机子上安装了Oracle ...

  10. Java基础学习-三元运算符和键盘录入的基本步骤和使用

    1.三元运算符的执行流程   package com.denniscui_05; /*  * 三元运算符:  *         关系表达式?表达式1:表达式2  *  * 执行流程:  *      ...