私はこの数時間これを探していました。おそらくあなたの何人かが私を助けることができます.
春の実行時に 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では、マッピングファイルがあるjarを定義するだけです
<?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>
休止状態のマッピング ファイルは頻繁に変更され、アプリはこのファイルを使用して UI の一部を生成しています。したがって、休止状態のマッピングを変更するたびにサーバーを再起動したくありません。
私が考えたことの1つは、EntityManagerFacotries/SessionFactoryを次のような新しいものに置き換えることです
でも副作用はわからない
もう 1 つの方法は、実行時にプログラムで EntityManagerFactory/SessionFactory マッピングを変更 (追加/削除) することです。
JPA:プログラムでEntityManagerFactoryにエンティティを追加する
JPA 2.0でエンティティクラスをプログラムでロードする?
解決策が見つからない非常に洗練されたシナリオ
別のスレッドで動的JPAについて言及されています
異なる JAR から永続性ユニットをマージ/拡張するにはどうすればよいですか?
JPA 2.0: エンティティークラスを PersistenceUnit に *別の jar から * 自動的に追加する
私はすでに春からアプリケーションコンテキスト全体を更新しようとしました
@RequestMapping(value = { "/path" })
public ModelMap refresh(Model model, Locale locale) throws IOException,
TemplateException, ExtJSException {
((ConfigurableApplicationContext)ApplicationContextProvider.getApplicationContext()).refresh();
return getMessage("Context was refreshed!!");
}
しかし、このプロジェクトはもうサポートされていないようです...