Hibernate не может прочитать запись, которая была сохранена на другом сервере - PullRequest
1 голос
/ 11 декабря 2019

У меня есть проект dropwizard, размещенный на 2 серверах для обеспечения высокой доступности. Однако запись, созданная одним сервером, иногда не может быть найдена другим сервером. Обычно другой сервер пытается получить запись через 2-3 минуты. После повторной попытки, скажем, через 1 час, я могу получить запись. Прикрепление кода для сохранения и получения записи.

        session.beginTransaction();
        session.getTransaction().setTimeout(GiftcardConstants.DATABASE_TIMEOUT);
        try {
            session.save(giftcardBookingEntity);
            if(session!=null && session.getTransaction() != null){
            log.info("committing transaction");
            session.getTransaction().commit();
        } else {
            log.error("error in database commit");
        }
            return true;
        }
        catch(Exception e){
            log.error("Error in persisting giftcard entity", e);
            return false;
        }
        finally{
            if(session != null) {
                log.info("Closing session");
                session.close();
            } else {
                log.error(" error in closing database session");
            }
        }

для получения записи выполняется следующим образом.

        try {
            Query query = session.createQuery("FROM GiftcardBookingEntity GB WHERE GB.id is :id");
            query.setLong("id",id);
            return (GiftcardBookingEntity) query.uniqueResult();
        } catch(Exception e){
            log.error("Error in retrieving entry from database", e);
            return null;
        } finally{
            if(session != null) {
                log.info("Closing session");
                session.close();
            } else {
                log.error(" error in closing database session");
            }
        }

GiftcardBookingEntity - это класс, который не связан ни с одним другим классом,Также я только что подключился к главному серверу MySQL.

Если сущность сохраняется на сервере 1, а вызов get поступает с сервера 2, один из 20 раз я не могу получить какую-либо сущность. Журналов ошибок нет, просто сущность равна нулю. Если я попытаюсь вручную через час, все работает нормально.

Я не уверен, что это проблема гибернации или проблема с сервером MySQL. Любая помощь приветствуется.

1 Ответ

0 голосов
/ 12 декабря 2019

Кэш 1-го уровня в спящем режиме по умолчанию активен

, попробуйте очистить его с помощью session.clear()

, вы также можете попробовать

session.refresh(entity) или entityManager.refresh(entity) (есливы используете JPA) даст вам свежие данные из БД.

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