Hibernate条件查询返回我陈旧的结果

时间:2012-03-13 15:06:13

标签: hibernate pagination criteria hsqldb

我在Hsqldb 1.8.0中有一个简单的表ApplicationLog

单独的客户端将数据插入此表。

我从另一个java客户端查询此表。 如果这个查询java客户端仍在运行,我发现条件查询计数不正确。(即如果插入是通过其他客户端发生的,当我查询时我没有看到那些结果 - 另一个客户端确实提交并且我可以查看插入的来自sql客户端的语句 - 只有我的hsql客户端在查看新数据时遇到问题)

如果我关闭客户端并重新启动它,则返回数据。

这是我的查询代码:

SessionFactory sessionFactory = HibernateConfigurer.getFactory();

Session session = sessionFactory.openSession();
Criteria criteria = session.createCriteria(
ApplicationLog.class).setCacheMode(CacheMode.IGNORE);

if(keys != null) 
{
int size = keys.length;

Long[] allKeys = new Long[size];
for (int i = 0; i < size; ++i)
{
allKeys[i] = new Long(keys[i]);
}

criteria.add(
Restrictions.in(
"applicationLogItemKey", allKeys));
}

if((from != null) && (to != null)) 
{
criteria.add(Restrictions.ge(
"logTime", from));
criteria.add(Restrictions.le(
"logTime", to));
} else {

if(from != null) {
criteria.add(Restrictions.ge(
"logTime", from));
} else if(to != null) {
criteria.add(Restrictions.le(
"logTime", to));
}

}

criteria.setFirstResult(startNumber);
criteria.setMaxResults(pageSize);
criteria.addOrder(Order.desc("logTime"));

List applicationLogs = criteria.list();

session.close();
return applicationLogs;

我尝试了不同的缓存模式,认为我只是在访问缓存。 我也试过驱逐有问题的班级。但没有任何帮助。除非我重新启动客户端,否则我只看到过时的数据而不是新插入的数据。

有人可以帮忙吗。

1 个答案:

答案 0 :(得分:0)

使用session.flush()。刷新会话会使当前在会话中的数据与数据库中的数据同步。

一个小问题:有太多未知数,即'to','from'和'startNumber'等。检查它们是否正确。