开发者社区> 问答> 正文

Spring ehcache缓存的对象修改字段,缓存自动更新的问题

DAO里面一个方法使用了缓存,Service里面调用这个方法之后个别字段需要修改值,改变过后下次再调用DAO方法的时候Service里面改的值更新到缓存里面去了,在Action中修改缓存返回的值也会出现这个问题,只是对象里面值变了,数据库是没变的,所以怀疑是缓存把对象改变的值重新更新缓存了,求解释,如何避免它更新缓存,明明缓存的是DAO方法,Service为什么会更新缓存呢?

下面是DAO、Service代码:

@Override
@Cacheable(value = CACHE_NAME)
public SUser get(BigDecimal id) throws SQLException {
    // TODO Auto-generated method stub
    return (SUser) baseDAO.get(SUser.class, id);
}                                    

@Override
public SUser getWidthRole(BigDecimal id) throws Exception {
    // TODO Auto-generated method stub
    SUser user = userDAO.get(id);
    if (user != null) {
        user.setUrPassword(UserConstantsUtil.PWD_EDIT_ENCRYPT); // 密码处理
        user.setRoleIds(getRoleIds(id)); // 角色id数组
    }
    return user;
}

展开
收起
a123456678 2016-03-18 15:10:14 4618 0
1 条回答
写回答
取消 提交回答
  • 事物配置如下:

    
     <!--事务自动代理-->
    
     <tx:advice id="txAdvice" transaction-manager="transactionManager">
    
     <tx:attributes>
    
     <tx:method name="get*" propagation="REQUIRED" read-only="true" />
    
             <tx:method name="*" propagation="REQUIRED" />
    
     </tx:attributes>
    
     </tx:advice>
    
     <aop:config proxy-target-class="false">
    
     <aop:pointcut id="pointcut" expression="execution(* com.juncsoft.llgj.*.service.*.*(..))" />
    
         <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut" />
    
     </aop:config>
    2019-07-17 19:06:48
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
高性能Web架构之缓存体系 立即下载

相关实验场景

更多