iteye_20333 2009-06-15 18:25
浏览 353
已采纳

hibernate一进程修改数据,一进程查询数据,查询到的数据为什么不根据修改的数据变化?

一个进程使用while循环不断查询数据库,另一个应用程序更新了数据库中的某个字段,但是查询的部分并没有查询到数据库中的变化,使用数据库查询工具,可以看到数据确实已经更新,请问这是什么问题?

 

以下是查询部分的代码,该部分在一个线程中运行

 

 

while(true) {
                TasksDAO dao = new TasksDAO();
                
                Tasks task = dao.findById(id);
                System.out.println("task : " + task.getTaskId() + "task.getStatus " + task.getStatus());
                if (task.getStatus() == ServerConstants.TASK_COMPLETED) {
                    //任务执行结束
                    System.out.println("--------------------------");
                    synchronized (ws) {
                        
                        ws.notifyAll();
                    }
                    break;
                }
                try {
                    System.err.println("Not got it!! " + task.getStatus());
                    TimeUnit.SECONDS.sleep(10);

                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
        
                dao.getSession().close();
            }

 另外一个进程只是简单的更新了一个task的字段

 

private void changeTaskStatus(int taskID, String status) {
        TasksDAO dao = new TasksDAO();
        Tasks task = dao.findById(taskID);
        int iStatus = -1;
        if (status.equals(ServerConstants.TASK_STARTED_S)) {
            iStatus = ServerConstants.TASK_STARTED;
        } else if (status.equals(ServerConstants.TASK_RUNNING_S)) {
            iStatus = ServerConstants.TASK_RUNNING;
        } else if (status.equals(ServerConstants.TASK_COMPLETED_S)) {
            iStatus = ServerConstants.TASK_COMPLETED;
        }
        
        task.setStatus(iStatus);
        Transaction tran = dao.getSession().beginTransaction();
        dao.save(task);
        tran.commit();
        dao.getSession().close();
    }

谢谢,希望哪位仁兄能够帮忙解答!


问题补充:
问题,已经解决,采用了 lovewhzlq 的答案,解决方法是在查询的时候也加上事务处理,也就是beginTransaction和commit
代码如下

TasksDAO dao = new TasksDAO();
Transaction tran = dao.getSession().beginTransaction();
Tasks task = dao.findById(id);
tran.commit();
dao.getSession().close();


谢谢各位!!
  • 写回答

4条回答 默认 最新

  • wanghaolovezlq 2009-06-15 18:38
    关注

    这个和事务策略有关,

    一个事务看不到另外一个事务更新的数据,

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?