@PrePersist вставить запрос - PullRequest
0 голосов
/ 07 января 2019

Я нахожусь в следующем сценарии: у меня есть сущность, управляемая через JPA в mysql. Некоторые поля класса PolyPersist хранятся в таблице mysql, отдельное поле этого объекта (PolyPersistData), которое содержит (довольно большие) данные, хранится в MongoDB с использованием обработчика @PrePersist. Так, PolyPersist хранится в таблице mysql (eclipselink), а поле PolyPersistData в MongoDB (hibernate-ogm).

@Entity
public class PolyPersist {

    public PolyPersist() {
    }
    public PolyPersistData getPolyPersistData() {
        return this.polyPersistData;
    }
    public void setPolyPersistData(PolyPersistData o) {
        this.polyPersistData = o;
    }

    @PrePersist
    @PreUpdate
    @PreMergeTransient
    public void serializeData() throws UnsupportedEncodingException, ClassNotFoundException, JAXBException {
        EntityManagerFactory emfactory = Persistence.createEntityManagerFactory("MongoEM");
        EntityManager em = emfactory.createEntityManager();
        em.persist(this.polyPersistData);
        }

    }

}

Я знаю, что не рекомендуется «пересекать» жизненный цикл этих сущностей (PolyPersist и PolyPersistData). Кроме того, создание экземпляра EntityManager в этом обработчике является проблемой наверняка (насколько я знаю, я должен ограничить экземпляры EntityManager, так как они требуют значительных вычислительных ресурсов / памяти). Какой лучший способ сделать это?

1 Ответ

0 голосов
/ 07 января 2019

Как вы упомянули, есть некоторые проблемы с этой реализацией. Некоторые из них:

  • Создание экземпляра EntityManager
  • Обработка транзакций Синхронно и медленно
  • сохранение операции внутри обработчика.

Я считаю, лучший способ сделать это - полностью отделить постоянство MySQL и MongoDB в разных DAO / репозиториях и согласовать это с верхним уровнем или перехватчиком. Реализация будет отличаться в зависимости от используемой платформы (Java SE / EE / Spring).

Полагаю, вам вообще не нужен MongoDB. Удаление MongoDB сделает решение проще. Вы можете справиться с проблемой размера сущности внутри MySQL, используя пользовательское табличное пространство или другой прием уровня БД.

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