Спящие перехватчики - PullRequest
       1

Спящие перехватчики

2 голосов
/ 30 января 2012

Я пытаюсь реализовать метод, описанный здесь , но не могу заставить его работать.

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

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

Класс перехватчика:

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>

Что не так? Спасибо

1 Ответ

2 голосов
/ 30 января 2012

Несколько наблюдений от вашего кода

  1. Вы НЕ переопределяете ни один из методов в EmptyInterceptor.Проверьте эту ссылку с примером примера перехватчика.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...