Hibernate拦截器
问题描述:
我试图实现方法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);
}
}
的截击类:
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);
}
}
}
配置:
<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>
有什么不对? 谢谢
答
一些意见,从你的代码
您尚未覆盖所有的方法
EmptyInterceptor
。用示例拦截器示例检出this link。EmptyInterceptor提供了您可以拦截的实体生命周期事件的默认实现。你需要重写你感兴趣的方法。
我不确定
transactionManager
是否需要对拦截器的引用。它纯粹是休眠的事情。你可以放弃它。拦截器需要会话或会话工厂(,您正在使用会话级别拦截器)。