Как получить обновленные значения из таблицы БД в том же сеансе гибернации - PullRequest
0 голосов
/ 09 мая 2018

У меня есть таблица результатов. Я извлекаю строку результата, используя result_id, а затем использую сведения о результате.

Я обновляю некоторые значения таблицы результатов:

try {
        Result instance = (Result) getTransactionSession().get("com.xxx.Result", id); //$NON-NLS-1$
        commit();

        if (instance == null) {
            ResultHome.log.debug("get successful, no instance found"); //$NON-NLS-1$
        } else {
            updateResultStepsSequence(id, instance);
            ResultHome.log.debug("get successful, instance found"); //$NON-NLS-1$
        }
        return instance;
    } catch (RuntimeException re) {
        ResultHome.log.error("get failed", re); //$NON-NLS-1$
        rollback();
        throw re;
    }

А

private void updateResultStepsSequence(long resultId, Result resultInstance) {
    if (resultInstance.getStepCount() > 0) {
        List<ResultStep> resultSteps = resultInstance.getResultSteps();
        if (resultSteps != null && !resultSteps.isEmpty() && (resultSteps.get(0).getDurationSum() == 0)) {
            try {
                Session session = SessionFactoryProvider.getSessionFactory().getCurrentSession();
                Query query = session.getNamedQuery("updateResultStepSequence").setLong("result_id", //$NON-NLS-1$ //$NON-NLS-2$
                        resultId);
                query.executeUpdate();
                commit();
            } catch (RuntimeException re) {
                ResultHome.log.error("Query execution failed", re); //$NON-NLS-1$
                rollback();
                throw re;
            }
        }
    }
}

После выполнения метода updateResultStepsSequence () я вижу, что таблица обновляется, но объект экземпляра все еще содержит старые значения до обновления БД.

Как я могу получить обновленные значения из таблицы? Я попытался создать новый сеанс, обновить таблицу и закрыть вновь созданный сеанс.

При таком подходе я могу получить последние обновленные значения из таблицы.

Есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 09 мая 2018

Метод Session.refresh () можно использовать для получения последнего состояния из базы данных:

session.refresh(instance)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...