问题描述
我现在要对某条记录进行修改,在Serivce中,从action中传递过来了记录的实体,如代码:public void saveResource(Resc resource) {//要进行分开,A->是新增资源,B->修改资源 两种情况在刷新缓存情况不同boolean isNew = (resource.getResourceId() == null);String path = "";resourceDao.getSession().clear();resourceDao.save(resource);if(!isNew){Resc resc = resourceDao.get(resource.getResourceId());path = resc.getPath();resourceDao.getSession().evict(resc);} }此处我想把数据表中要修改的记录中path这个字段值与正要修改的页面上传递过来的resource.getPath()进行比较但是我得到的两个值都是相同的.其中数据表中的值与页面上的值不同,但是通过我的取值却是相同的,我该怎么处理?如果resourceDao.getSession.evict(resource)取到的值到是不同了,但是我后面要用到resource中的roles集合,如果evict了会报异常 问题补充:congjl2002 写道
解决方案
其实解决问题的根本在于对get、evict、clear方法的理解,如果掌握了这几个方法与缓存之间的关系,再结合业务逻辑,很容易就能找到解决办法。
解决方案二:
你这样又重新查一遍,有意义吗,直接从界面传会一个值不就可以了吗
解决方案三:
我有点没看懂,为啥先把resource的path值拿出来,然后再把resource整个保存到数据库里,之后调用get方法再把resource拿出来,最后把path值作比较,这中间就只有一个resource对象啊。为啥要调用save呢?如果要比较两个path,可以在save之前把数据库里面的path拿出来呀。然后再比较啊,正常逻辑不是这样么?
解决方案四:
这样的话就只能通过另一个变量传回来了
解决方案五:
我觉得你这个很有问题,你都已经执行了resourceDao.save(resource); 然后再去查,怎么可能会不一样?这个改一下试试public void saveResource(Resc resource) { //要进行分开,A->是新增资源,B->修改资源 两种情况在刷新缓存情况不同 boolean isNew = (resource.getResourceId() == null); String pathA = resource.getPath(); String pathB = ""; resourceDao.getSession().clear(); resourceDao.save(resource); if(!isNew){ Resc resc = resourceDao.get(resource.getResourceId()); pathB = resc.getPath(); resourceDao.getSession().evict(resc); } }