我有代码选择数据库的所有行并删除它们。它持续执行此过程。当数据库中没有数据时,它会休眠2秒然后再次尝试。我的问题如下,当新数据添加到数据库时,我的代码看不到它。
测试:
我运行了我的代码,它正在等待新数据,几秒钟后我手动将数据添加到数据库中。我的代码根本没有看到新行。我100%确定我添加的数据实际上是在数据库中。
我正在使用Hibernate和MySQL。
代码:
String queryString = "select * from rawleads";
SQLQuery query = session.createSQLQuery(queryString);
ArrayList list = (ArrayList) query.list();
while (list.isEmpty()) {
Thread.sleep(2000);
query = session.createSQLQuery(queryString );
list = (ArrayList) query.list();
System.out.println("refreshing table");
}
System.out.println("Processing...");
我认为它可能与缓存有关,因为代码无法看到对数据库所做的更改。 谢谢你的帮助。
答案 0 :(得分:2)
您可能必须在每次新迭代之前创建一个新事务。
编辑:
while (running) {
Transaction t = session.beginTransaction();
try {
String queryString = "select * from rawleads";
SQLQuery query = session.createSQLQuery(queryString);
List pendingLeads = query.list();
if (pendingLeads.isEmpty()) {
Thread.sleep(2000);
} else {
process(pendingLeads);
}
t.commit();
} catch (Exception e) {
t.rollback();
}
}