2012-01-30 4 views
2

Я пытаюсь реализовать метод, описанный here, но не может заставить его работать.Перехватчики Hibernate

Во время компиляции ошибок нет, но перехватчик никогда не срабатывал.

DAO:

public class GeneralInvoicesDAO { 
@Autowired 
private SessionFactory sessionFactory; 

@Autowired 
private Interceptor entityInterceptor; 

    @Transactional 
    public void update(GeneralInvoice object) { 
     Session session = SessionFactoryUtils.getSession(sessionFactory, entityInterceptor, null); 

     session.saveOrUpdate(object); 
    } 
} 

Intercepter класс:

public class NewEntityInterceptor extends EmptyInterceptor implements Interceptor { 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 2914362528125673753L; 

    @Override 
    public Boolean isTransient(Object n) { 
     Logger logger = Logger.getLogger(getClass().getName()); 

     try { 
      logger.warn("test"); 
      Boolean result = Boolean.FALSE; 

      BaseEntity entity = (BaseEntity) n; 
      if (entity.getId() <= 0L) { 
       entity.setId(null); 
       result = Boolean.TRUE; 
      } 
      logger.warn(result.toString()); 
      return result; 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
      return super.isTransient(n); 
     } 
    } 
} 

Config:

<bean id="newEntityInterceptor" class="de.crm.interceptor.NewEntityInterceptor" /> 
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionFactory" /> 
     <property name="entityInterceptor" ref="newEntityInterceptor" /> 
    </bean> 

Что случилось? Спасибо

ответ

2

Несколько замечаний от вас код

  1. Вы НЕ отвергая любой из методов в EmptyInterceptor. Отъезд this link с примером примера перехватчика.

  2. EmptyInterceptor предоставляет стандартные реализации событий жизненного цикла объекта, которые вы можете перехватить. Вам необходимо переопределить метод, который вас интересует.

  3. Я не уверен, что transactionManager нуждается в каких-либо ссылках на перехватчик. Это чисто спящий режим. Вы можете покончить с этим. Перехватчики необходимы либо с сессионным или сессионным заводом (, вы используете перехватчик уровня сеанса).

Смежные вопросы