我现在要对某条记录进行修改,在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了会报异常

解决方案 »

  1.   

    不要用get方法 get方法是从缓存中取当然还是和你传过去的值是一样的
    你从数据库重新查询出来 进行比较就好了
      

  2.   

    自己解决了.关键在于resourceDao.save(resource)与相关的evict()方法的使用顺序问题.
    改为:
    if(!isNew){
    resourceDao.getSession().evict(resource);
    Resc resc = resourceDao.get(resource.getResourceId());
    path = resc.getPath();
    }
     resourceDao.getSession().clear();
    resourceDao.save(resource);
    就可以了.关键还是在于resource的三种状态的转变问题,理解的透彻一些就好了.