Я искал это последние несколько часов, может быть, некоторые из вас могут мне помочь.Spring + Hibernate + JPA: как перезагрузить EntityManagerFactory во время выполнения
Я пытаюсь добиться перезагрузки моего отображения информации в EntityManagerFactory (или SessionFactory) во время выполнения весной
В EntityManagerFactory определяется следующим образом:
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceXmlLocation" value="persistence.xml" />
<property name="persistenceUnitName" value="JPAService" />
<property name="persistenceProviderClass" value="org.hibernate.ejb.HibernatePersistence"/>
<property name="dataSource" ref="dataSource" />
<property name="jpaDialect">
<bean class="org.springframework.orm.jpa.vendor.Hibernate.JpaDialect" />
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="hibernate.hbm2ddl.auto">none</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
В моей persistence.xml I просто определить банку, где файлы отображения являются
<?xml version="1.0" encoding="UTF-8"?>
<persistence
xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="JPAService" transaction-type="RESOURCE_LOCAL">
<jar-file>WEB-INF/lib/mapping.jar</jar-file>
</persistence-unit>
</persistence>
Мои файлы сопоставления спящего режима будут меняться очень часто, и мое приложение использует эти файлы для создания части пользовательского интерфейса. Поэтому я не хочу перезапускать сервер каждый раз, когда я меняю свои спящие сопоставления.
Одна вещь, я думал о заменяет EntityManagerFacotries/SessionFactory с новым, как так
Hibernate configuration on runtime
Dynamic Configure an EJB
, но я не знаю, что побочные эффекты
Другой способ заключается в изменении (добавлять/удалять) EntityManagerFactory/SessionFactory Mapping программно во время выполнения:
JPA: adding entities to EntityManagerFactory programmatically
Programmatically loading Entity classes with JPA 2.0?
Очень сложный сценарий, в котором ни одно решение не было найдено
Dynamic ORM entity class generation - NOT SOLVED
другой THEAD mentiones динамичную-JPA
How can I merge/extend persistence units from different JARs?
JPA 2.0: Adding entity classes to PersistenceUnit *from different jar* automatically
я уже пытался обновить весь контекст приложения с весны, как так
@RequestMapping(value = { "/path" })
public ModelMap refresh(Model model, Locale locale) throws IOException,
TemplateException, ExtJSException {
((ConfigurableApplicationContext)ApplicationContextProvider.getApplicationContext()).refresh();
return getMessage("Context was refreshed!!");
}
Но, похоже, как если бы этот проект больше не поддерживается ...
Каков класс, возвращаемый ApplicationContextProvider.getApplicationContext()? – Saish
@Saish Я использую такой код [ApplicationContextProvider] (http://blog.imaginea.com/making-a-spring-bean-applicationcontext-aware/) –
Это хорошо и хорошо, но не то, что я пытался определить. Если вы вызываете ApplicationContextProvider.getApplicationContext(). GetClass(). GetName(), что это возвращает? – Saish