2010-07-11 1 views
0

J'essaye d'accéder à la base de données d'Hibernate Interceptor (je dois auditer seulement des objets spécifiques qui sont définis dans une table différente) et l'accès est infranchissable (j'obtiens des exceptions). Existe-t-il un moyen d'accéder à la base de données dans l'intercepteur?Comment allons-nous accéder à la base de données de AuditTrailInterceptor?

Mon AuditTrailInterceptor est:

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); 

     } 

Le AuditTrailInterceptor défini dans le applicationContext.xml comme une propriété

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

Merci!

Répondre

0

Je ne sais pas exactement quel problème vous avez, mais je me souviens d'une pierre d'achoppement que j'ai vu dans le traitement des intercepteurs. Pour accéder à la base de données dans un intercepteur d'hibernation ou un écouteur d'événement, vous devez ouvrir une nouvelle session et ne pouvez pas partager une session avec l'opération d'hibernation interceptée, ce qui est logique si vous envisagez l'intercepteur. faire un peu ...

Il y a un exemple de code au the JBoss wiki pour l'utilisation d'intercepteurs et d'écouteurs d'événements pour la journalisation d'audit qui pourrait être utile.

Si cela ne vous aide pas à trouver la solution, vous pouvez publier plus de ce que vous avez essayé et une trace de pile du problème.

Questions connexes