一个进程使用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();
谢谢各位!!