2016-07-27 5 views
1

스프링 + 하이버 네이트 코드에서 인터셉터를 사용하려고한다.Hibernate 인터셉터가 작동하지 않는다.

inceptor 정의는 다음과 같다 :

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

및 최대 절전 모드 DAO 지원 DAO 클래스 내 인터셉터 설정과 사용은

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

(I 대신이 너무을 SessionFactory를 구성 할)입니다 확장

첫 번째 문제는 제 인터셉터의 기능이 preFlush와 postFlush를 제외하고는 작동하지 않는다는 것입니다!

두 번째 문제는이 인터셉터를 SessionFactory 일반 구성으로 사용할 수 있지만 모든 객체가 아닌 특정 객체에서만 작동하는 것입니다.

+0

EmptyInterceptor 코드를 공유하십시오. –

+0

@NarendraPandey 그것은 org.hibernate 패키지에 있으며 내 코드가 아닙니다. –

답변

1

엔티티를 추가, 수정 또는 삭제하지 않으므로 인터셉터 메소드 onSave, onFlushDirty 및 onDelete는 코드에서 호출되지 않습니다. 관리 엔티티를 생성, 수정 및 삭제하려고하면 작동합니다.

특정 엔터티에 대한 인터셉터를 구성 할 수 없습니다. 당신은 instanceofs 또는 getClass(). isAssignableFrom() 또는 각각의 메소드에서 동작을 제한하여 동작을 제한해야합니다.

+0

빈 인터셉터를 확장하는 대신 인터셉터 클래스를 구현하고 마침내 성공했습니다! Tnx는 두 번째 질문에 대답했습니다. 그것은 도움이되었다. –

관련 문제