2011-11-11 7 views
1

JPAプロバイダとしてJBossS seamとHibernateを使用しています。私のpersistence.xmlでPersistence.xmlで設定されたプロパティをプログラムで削除する方法

components.xmlで
<properties> 
      <!-- Basic --> 
      <property name="hibernate.connection.driver_class"  value="org.gjt.mm.mysql.Driver"/> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/> 
      <property name="hibernate.ejb.interceptor" value="com.wi.test.audit.ActivityInterceptor"/> 
    </properties> 

<persistence:entity-manager-factory name="entityManagerFactory" persistence-unit-name="mydb" /> 
    <persistence:managed-persistence-context name="entityManager" auto-create="true" entity-manager-factory="#{entityManagerFactory}" /> 
    <transaction:entity-transaction entity-manager="#{entityManager}" /> 
    <factory 
     name="session" 
     scope="STATELESS" 
     auto-create="true" 
     value="#{entityManager.delegate}" 
    /> 

今、私のプログラムでは、私は、プロパティhibernate.ejb.interceptorを除去することにより、設定したインターセプターを削除したいです。

プロパティのマップを取得しようとしましたが、インターセプタのプロパティを削除し、新しいentitymanagerを作成しました。以前はコンフィグレーションされていたインターセプタを使用しています。私はインターセプタあなたはHibernateのバージョンを使用している

Field f = SessionFactoryImpl.class.getDeclaredField("properties"); 
     f.setAccessible(true); 
     Properties p = (Properties)f.get(session.getSessionFactory()); 
     Map<String, String> map = new HashMap<String, String>((Map) p); 
     map.remove("hibernate.ejb.interceptor"); 
     localSession =(Session)entityFactory.createEntityManager(map).getDelegate(); 

答えて

0

を削除するために使用しています

コード?

プロパティを削除するだけでは不十分です。初期化されたインターセプタをHibernateから直接リフレクションAPIを介して削除する必要があります。 sessionFactoryには、インスタンスへの参照を含むsessionFactoryOptionsフィールドがあります。そのため、削除しようとする可能性があります。

EDIT:実際にあなたがnullでは動作しませんので、EmptyInterceptorに置き換えることを試みることができる(あなたはフラッシュ上にNullPointerになるだろう)

このソリューションは、グローバル使用のためのものです。ローカルで使用する場合は、現在のセッションでインターセプタを置き換える必要があります(entityManagerから取得できます)。

関連する問題