Синхронизация сессии hibernate после вставок - PullRequest
0 голосов
/ 15 января 2012

У меня есть код, который выбирает все строки базы данных и удаляет их. Он выполняет этот процесс непрерывно. Если в базе данных нет данных, она спит в течение 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...");

Я думаю, это может быть связано с кешем, так как код не может видеть изменения, внесенные в базу данных. Спасибо за вашу помощь.

1 Ответ

2 голосов
/ 15 января 2012

Возможно, вам придется создавать новую транзакцию перед каждой новой итерацией.

edit:

    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();
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...