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