我在service里面定义了一个update方法,find方法,先调用update在调用find,查询到的数据是修改前的,但是数据库中的数据已经修改

又有薄荷香 发布于 2015/03/17 12:20
阅读 1K+
收藏 0
    今天碰到一个比较饶的问题,我在service里面定义了一个update方法,修改表中的数据,和另外一个find方法查询该数据库的数据,
然后在action中先一个方法,方法中先引用update,在引用find方法,离奇的事情发生了,数据库的数据改变了,但是查询到的数据居然是
修改前的。。。
下面是我的代码
update方法
public void updatePRelationFlag(String orderNo, String flag){
        StringBuffer sql = new StringBuffer();
        sql.append("update prelation r set r.flag='").append(flag).append("' where r.orderno='").append(orderNo).append("'");
        int i = super.getSession().createSQLQuery(sql.toString()).executeUpdate();
    }
find方法
    public PRelation findpPRelation(String payNo){
        StringBuffer sql = new StringBuffer();
        sql.append("select * from prelation r where payno = :payNo");
        List<PRelation> policys = super.getSession().createSQLQuery(sql.toString()).addEntity(PRelation.class).setString("payNo", payNo).list();
        return policys.get(0);
    }
action中调用顺序:
public String actionMe(){
    oService.updatePolicyRelationFlag("02010101","02");
    oService.findProPolicyRelation("0200201002");

}
当我只查询表中的一个字段时,查询到的数据是修改后的
update方法
public void updatePRelationFlag(String orderNo, String flag){
        StringBuffer sql = new StringBuffer();
        sql.append("update prelation r set r.flag='").append(flag).append("' where r.orderno='").append(orderNo).append("'");
        int i = super.getSession().createSQLQuery(sql.toString()).executeUpdate();
    }
find方法
    public String findFlag(String payNo){
        StringBuffer sql = new StringBuffer();
        sql.append("select r.flag from prelation r where payno = :payNo");
        List<Object> flagOs = super.getSession().createSQLQuery(sql.toString()).setString("payNo", payNo).list();
        return flagOs.get(0).toString();
    }
action中调用顺序:
public String actionMe(){
    oService.updatePolicyRelationFlag("02010101","02");
    oService.findFlag("0200201002");

}
是因为修改时用的sql语句,而查询用的对象查询吗?哪位高手可以帮助解释一下,非常感谢!!!
加载中
0
0
Jack_Q
Jack_Q

你的数据库事务是怎么配置的,贴代码出来看看,应该是这方面的问题。


0
利东
利东
你更新的是:orderNo =“02010101” 把flag 更新为 "02" ,查询是payno  = “0200201002”的flag值。  请问你确定更新orderNo ="02010101"时,payno="0200201002" 的数据是被更新了么
0
张恒强
张恒强

首先确认再重复做下你的实验,确认结果跟你描述的是一样的,

然后如果是还是如此的话,那就有点蛋疼了。如果不是的话,那就应该是你事务配置的问题。你可以试试在执行update方法里面手动执行下事务提交。

返回顶部
顶部