Запрос критериев гибернации возвращает мне устаревшие результаты - PullRequest
0 голосов
/ 13 марта 2012

У меня есть простая таблица ApplicationLog в Hsqldb 1.8.0

Отдельный клиент вставляет данные в эту таблицу.

Я запрашиваю эту таблицу у другого 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 голосов
/ 13 марта 2012

Используйте session.flush().При очистке сеанса данные, которые в данный момент находятся в сеансе, синхронизируются с тем, что находится в базе данных.

Одна небольшая проблема: слишком много неизвестных, т. Е. «To», «from», «startNumber» и т. Д. Проверьтеесли они правильные.

...