4

私はこの数時間これを探していました。おそらくあなたの何人かが私を助けることができます.

春の実行時に 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を次のような新しいものに置き換えることです

実行時のHibernate 構成
EJB の動的構成

でも副作用はわからない

もう 1 つの方法は、実行時にプログラムで EntityManagerFactory/SessionFactory マッピングを変更 (追加/削除) することです。

JPA:プログラムでEntityManagerFactoryにエンティティを追加する
JPA 2.0でエンティティクラスをプログラムでロードする?

解決策が見つからない非常に洗練されたシナリオ

動的 ORM エンティティ クラスの生成 - 未解決

別のスレッドで動的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!!");
}

しかし、このプロジェクトはもうサポートされていないようです...

4

1 に答える 1