2016-07-27 1 views
1

J'essaie d'utiliser des intercepteurs dans mon code de printemps + hibernate.Intercepteur Hibernate ne fonctionne pas

La définition de Inceptor est comme ci-dessous:

public class myInterceptor extends EmptyInterceptor{ 

private static final long serialVersionUID = 1L; 
Session session; 

public void setSession(Session session) { 
    this.session=session; 
} 

public boolean onSave(Object entity,Serializable id, 
    Object[] state,String[] propertyNames,Type[] types) 
    throws CallbackException { 
    System.out.println("onSave"); 
    return false; 
} 

public boolean onFlushDirty(Object entity,Serializable id, 
    Object[] currentState,Object[] previousState, 
    String[] propertyNames,Type[] types) 
    throws CallbackException { 
    System.out.println("onFlushDirty"); 
    return false; 
} 

public void onDelete(Object entity, Serializable id, 
    Object[] state, String[] propertyNames, 
    Type[] types) { 
    System.out.println("onDelete");  
} 

//called before commit into database 
public void preFlush(Iterator iterator) { 
    System.out.println("preFlush"); 
} 

//called after committed into database 
public void postFlush(Iterator iterator) { 
    System.out.println("postFlush");  
    }   
} 

et ma configuration intercepteurs et l'utilisation en classe dao avec le soutien de dao mise en veille prolongée extend

myInterceptor interceptor = new myInterceptor(); 
    SessionFactory sessionFactory = getSessionFactory(); 
    SessionBuilder sessionBuilder = sessionFactory.withOptions(); 
    Session session = sessionBuilder.interceptor(interceptor).openSession(); 
    interceptor.setSession(session); 

    Transaction tx = session.beginTransaction(); 

    session.merge(member); 
    tx.commit(); 
    session.close(); 

(je configuration SessionFactory au lieu de cela aussi)

Le premier problème est que les fonctions de mon intercepteur ne fonctionnent pas sauf preFlush et postFlush!

Le deuxième problème est comment je peux utiliser cet intercepteur en tant que configuration générale de SessionFactory, mais seulement en travaillant sur mon objet spécifique et pas tous les objets.

+0

Veuillez partager le code EmptyInterceptor –

+0

@NarendraPandey C'est dans le paquet org.hibernate et ce n'est pas mon code. –

Répondre

1

Vos méthodes d'intercepteur onSave, onFlushDirty et onDelete ne sont pas appelées dans votre code, car vous n'ajoutez, ne modifiez pas et ne supprimez pas d'entités. Essayez de créer, modifier et supprimer des entités gérées, et cela fonctionnera.

Vous ne pouvez pas configurer l'intercepteur pour des entités spécifiques; vous devrez coder instanceofs ou getClass(). isAssignableFrom() ou similaire dans vos méthodes respectives pour restreindre le comportement à ceux-ci.

+0

J'ai essayé d'implémenter la classe Interceptor au lieu d'étendre emptyinterceptor et finalement ça a marché! Tnx pour répondre à la deuxième question. C'était utile. –