2009-11-11 4 views
0

J'ai créé un intercepteur de mise en veille prolongée:afterTransactionCompletion ne fonctionne pas

public class MyInterceptor extends EmptyInterceptor { 

private boolean isCanal=false; 

public boolean onSave(Object entity, Serializable arg1, Object[] arg2, String[] arg3, Type[] arg4) throws CallbackException { 

    for(int i=0;i<100;i++){ 
     System.out.println("Inside MyInterceptor(onSave) : "+entity.toString()); 
    } 
    if(entity instanceof Canal){ 
     isCanal=true; 
    } 
    return false; 
} 

public void afterTransactionCompletion(Transaction tx){ 
    if(tx.wasCommitted()&&(isCanal)){ 
     for(int i=0;i<100;i++){ 
      System.out.println("Inside MyInterceptor(afterTransactionCompletion) : Canal was saved to DB."); 
     } 
    } 
} 

mais la méthode afterTransactionCompletion ne soit pas exécuté après une transaction est engagée. J'ai essayé toutes les façons que je connais, mais je ne peux pas le faire fonctionner. Ce qui est plus surprenant, c'est que la méthode onSave fonctionne bien.

Aide!

Could this be due to this bug ? : 
http://opensource.atlassian.com/projects/hibernate/browse/HHH-1956 

Comment puis-je contourner ce bug si elle est la cause?

Répondre

0

Quelle est la signification d'afterTransactionCompletion supposée être? Dans la documentation, j'ai trouvé:

void afterTransactionCompletion(boolean successful, Transaction tx) 

Dans ce cas, il n'est pas surprenant que votre méthode ne soit pas appelée.

Je pense que si vous utilisez l'annotation @Override vous serez averti par le compilateur que vous avez mal la signature.

+0

J'ai utilisé cette documentation: https://www.hibernate.org/hib_docs/v3/api/org/hibernate/EmptyInterceptor.html#afterTransactionCompletion(org.hibernate.Transaction). Il semble que nous n'utilisons pas le même document. plz, expliquez. – Attilah

+0

Eh bien, je viens de googler. Cependant, le point clé est de regarder la signature de EmptyInterceptor - est-ce que votre signature correspond? – djna

+0

J'ai utilisé l'annotation @Override. Ma signature correspond à la signature de EmptyInterceptor. – Attilah