У меня есть приложение Spring MVC + Hibernate + JPA. Также есть 4 разных схемы в моем db с подобными таблицами. (для разных компаний).
Теперь, когда я использую свое приложение Hibernate, могу ли я переключить группу сохранения, чтобы я мог использовать ту же форму (с тем же контентом) для сохранения данных во всех четырех схемах?
Я знаю, что во время выполнения я могу переключить блок сохранения, но я хочу иметь возможность использовать уже загруженные формы для сохранения данных во все четыре схемы путем изменения единицы измерения продолжительности.
Некоторое время назад у меня была схожая проблема. У меня было две одинаковые схемы - приложение должно было сохраняться до первого или второго в зависимости от некоторой логики. Это был чистый Hibernate, но, говоря о JPA, я предлагаю иметь 4 единицы персистентности, определенные в вашем persistence.xml:
persistence.xml
<persistence-unit name="PU1">
...
</persistence-unit>
<persistence-unit name="PU2">
...
</persistence-unit>
[...]
и класс DAO, который вводил прокси EntityManager - каждый для разных PU:
@Repository
public class MyDaoImpl implements MyDao {
@PersistenceContext(unitName = "PU1")
private EntityManager em1;
@PersistenceContext(unitName = "PU2")
private EntityManager em2;
...
public void saveToPU1(MyEntity e) {
em1.persist(e);
}
public void saveToPU2(MyEntity e) {
em2.persist(e);
}
...
}
Конечно, em1
аннотированный с @PersistenceContext(unitName="PU1")
является прокси-сервером Spring для сеанса Hibernate и становится открытым и связан с текущим потоком, только если этот поток пытается его использовать.
Я не уверен, что понимаю вашу проблему: вы можете изменить PersistentUnit, используемый во время выполнения, с помощью метода Persistence # createEntityManagerFactory (String persistenceUnitName).
Но если вы хотите
сохранять данные во все четыре схемы
Затем вы должны повторить операцию (сохраняйте, я думаю) четыре раза (например, в частном методе, в котором имя единицы сохранения сохраняется как параметр).
Вы можете ввести кеш формы, если хотите повторно использовать уже загруженные формы, но это вопрос архитектуры программного обеспечения.
Как было предложено в учебнике Java EE 5, с точки зрения программного обеспечения, наличие формы, зависящей непосредственно от уровня JPA, не является лучшей практикой. Другой ответ подсказывает: DAO может быть решением. Все о вашем жизненном духе DAO.
Книга основных моделей JEE предлагает это (в онлайн-ссылке упоминается кратко тема, лучше напечатанная книга): сопоставление DAO с шаблоном Factory - хорошая идея. Вы можете перерабатывать EntityManagerFactory или что угодно.