【发布时间】:2018-02-26 23:07:05
【问题描述】:
final CountDownLatch latch = new CountDownLatch(1);
for (int i = 0; i < contractorServeables.size(); i++) {
status = UserProfileDAO.testGetJobStatusOneColumn(saveJob.getJobId());
if ("accepted".equals(status) || "canceled".equals(status)) {
latch.countDown();
break;
}
MessagingFCM.sendMessageToDevice("distance", "body", contractorIdToken);
try {
System.out.println("waiting");
latch.await(30, TimeUnit.SECONDS);
System.out.println("next");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
latch.countDown();
所以我正在遍历一个数组并发送一个推送通知,然后等待 30 秒以查看是否收到了来自推送通知的响应。为了测试这一点,我从 Postman 调用我的 Web 服务,在收到通知后,我手动将数据库字段更新为“已接受”。但我没有看到变化反映在这里。
status = UserProfileDAO.testGetJobStatusOneColumn(saveJob.getJobId());
这一行应该更新数据库中的状态,但状态不会从原始值改变。我不确定这里是否存在某种线程问题,我可以运行我的查询,我看到数据库中的值已更改,但 status 始终保持其初始值。这是struts2 & Hibernate。 testGetJobStatusOneColumn 方法如下:
public static String testGetJobStatusOneColumn(String jobId) {
Session session = HibernateUtil.getSession();
String hql = "select status from JobBoard where jobId = :jobId";
String t = (String) session.createQuery(hql).setString("jobId", "2").uniqueResult();
System.out.println("JobBoard: " + t.toString());
session.close();
return t;
}
【问题讨论】:
-
那么您到底在哪里更新数据库?您确定事务正在提交吗?
-
没有代码可用。
-
@mick 我认为它在struts生成的ui中的smwhere。
-
我已经把代码。我正在手动更新数据库进行测试。
-
是的,事务正在提交,因为我是手动执行的。
标签: hibernate