스프링 + 하이버 네이트 코드에서 인터셉터를 사용하려고한다.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 일반 구성으로 사용할 수 있지만 모든 객체가 아닌 특정 객체에서만 작동하는 것입니다.
EmptyInterceptor 코드를 공유하십시오. –
@NarendraPandey 그것은 org.hibernate 패키지에 있으며 내 코드가 아닙니다. –