hibernate 修改数据时,修改前的值与修改中的值的比较

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

其实解决问题的根本在于对get、evict、clear方法的理解,如果掌握了这几个方法与缓存之间的关系,再结合业务逻辑,很容易就能找到解决办法。

我觉得你这个很有问题,你都已经执行了
resourceDao.save(resource); 然后再去查,怎么可能会不一样?这个改一下试试
[code="java"]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);

}

     } 

[/code]

这样的话就只能通过另一个变量传回来了

我有点没看懂,为啥先把resource的path值拿出来,然后再把resource整个保存到数据库里,之后调用get方法再把resource拿出来,最后把path值作比较,这中间就只有一个resource对象啊。
为啥要调用save呢?
如果要比较两个path,可以在save之前把数据库里面的path拿出来呀。然后再比较啊,正常逻辑不是这样么?

你这样又重新查一遍,有意义吗,直接从界面传会一个值不就可以了吗