Я работаю с 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
.
Что может быть причиной этого?Может быть лучше использовать менеджер сущностей вместо сессий?