Многопоточность и отсутствие обновления

 
 
 
Сообщения:28
Здравствуйте. Работаю в многопоточном приложении с postgresql через Hibernate средствами сессий.
Инициализация:
    <property name="connection.driver_class">org.postgresql.Driver</property>
    <property name="hibernate.current_session_context_class">thread</property>

(остальной конфиг это URL соединения и entity 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;
    }
}


Получаю/обновляю/удаляю/.. Entity отдельным сервисом в котором все действия происходят внутри одной транзакции:
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). После вызова update() стоит строчка логов которая успешно отобразилась. Т.е. вызов update-а прошёл без эксепшенов. Однако в базе это поле не поменялось. Подождал несколько секунд подумав на всякие flush-и и пр. - ничего не поменялось. Поле в БД просто не обновилось и всё. Хотя по коду и внутри приложения это не так.
Попробовал воспроизвести баг создав предыдущие условия и перезапустив приложение - ничего, всё отлично обновляется, никаких проблем.
С чем может быть связана такая ситуация?
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет