Hibernate сессия успешно обновляет объект, но иногда нет - PullRequest
0 голосов
/ 22 февраля 2019

Я работаю с PostgreSQL в многопоточном режиме по сеансам Hibernate.Init:

<property name="connection.driver_class">org.postgresql.Driver</property>
<property name="hibernate.current_session_context_class">thread</property> 

(другие строки - это URL-адрес соединения и описание xml сущности))

HibernateUtil:

public class HibernateUtil {
    private static SessionFactory sessionFactory;

    static {
        try {
            Configuration configuration = new Configuration();
            configuration.configure();
            sessionFactory = configuration.buildSessionFactory();
        } catch (Throwable ex) {
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public static Session getSession() {
        return sessionFactory.getCurrentSession();
    }

    public static void close() {
        sessionFactory.close();
    }

    public static void setSessionFactory(SessionFactory factory) {
        sessionFactory = factory;
    }
}

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

public class SessionService {
    public static <T> T get(Class<T> classvar, int id) {
        Session session = HibernateUtil.getSession();
        session.beginTransaction();
        T result = session.get(classvar, id);
        session.getTransaction().commit();
        return result;
    }
    // Some other code
    public static void update(Object obj) {
        Session session = HibernateUtil.getSession();
        session.beginTransaction();
        session.update(obj);
        session.getTransaction().commit();
    }
}

Нет проблем с многопоточностью (или я ее не вижу).Но некоторое время назад я видел странную ошибку.Я получил одну запись из базы данных SessionService.get (Entity.class, 1).Измените одно поле этого объекта и сохраните его с помощью SessionService.update (entity).Обновление было успешно выполнено без исключений (регистрация одобрена).Но изменений не видно в базе данных.Во время выполнения сущность имеет эти изменения, но не в БД.Я жду некоторое время (для флеша и других), но ничего не изменилось.Пытался повторить ошибку - все хорошо, ошибка не найдена.В один день я ловлю эту ошибку на рабочем сервере с 19 объектами из 200, но в другие дни я не видел эту ошибку.Последний важный момент: я не вижу их t catched this bug with other entities (or i don.

Что может быть причиной этого?Может быть лучше использовать менеджер сущностей вместо сессий?

1 Ответ

0 голосов
/ 22 февраля 2019

Можете ли вы опубликовать весь файл hibernate.cfg.xml (конечно, удалите имя пользователя и пароль).Также вы на 100% уверены, что не получите сообщение об ошибке (дикое предположение): другой объект с таким же значением идентификатора уже был связан с сеансом?

Есть ошибки при запуске Hibernate, что литературные вспышкив консоли за полсекунды при выполнении запросов.Была эта проблема некоторое время назад.

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