Я нахожусь в следующем сценарии: у меня есть сущность, управляемая через 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, так как они требуют значительных вычислительных ресурсов / памяти).
Какой лучший способ сделать это?