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;
}
事物配置如下:
<!--事务自动代理-->
<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>
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。