0

Hibernate Interceptorからデータベースにアクセスしようとしています(別のテーブルで定義されている特定のオブジェクトのみを監査する必要があります)が、アクセスできません(例外が発生します)。インターセプターでデータベースにアクセスする方法はありますか?

私のAuditTrailInterceptorは次のとおりです。

public class AuditTrailInterceptor extends EmptyInterceptor {

public boolean onSave(Object entity, Serializable id, Object[] state, String[]    
propertyNames, Type[] types) {
   AuditTrailService serviceComp = (AuditTrailService) SpringBeanFinder
                       .findBean(SpringBeanFinder.AUDIT_SERVICE);
    serviceComp.getObjectAuditCompanies(theCompany)
    return false;
  }

}

@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
      public Collection<ObjectAuditCompany> getObjectAuditCompanies(Company company){
            return  objectAuditCompanyDAO.findByQuery("from " + objectAuditCompanyDAO.getPersistentClass().getName() + " where company=? ", company);

      }

applicationContext.xmlでプロパティとして定義されたAuditTrailInterceptor

<bean id="onboardSessionFactory" parent="sessionFactory">
<property name="entityInterceptor">
              <bean class="com.mycompany.daoimpl.AuditTrailInterceptor" />
  </property>
</bean>

ありがとう!

4

1 に答える 1

0

あなたがどのような問題を抱えているのか正確にはわかりませんが、インターセプターを扱う際に私が見た1つのつまずきを覚えています。

Hibernateインターセプターまたはイベントリスナーでデータベースにアクセスするには、新しいセッションを開く必要があり、インターセプトされているHibernate操作とセッションを共有することはできません。これは、インターセプターが少し行っていることを考えている場合に意味があります。 ..

JBoss wikiには、監査ログにインターセプターとイベントリスナーの両方を使用するためのサンプルコードがあります。

これで解決策が見つからない場合は、試したことと問題のスタックトレースをさらに投稿することをお勧めします。

于 2010-07-11T15:55:27.300 に答える