Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 休眠拦截器_Java_Hibernate_Spring - Fatal编程技术网

Java 休眠拦截器

Java 休眠拦截器,java,hibernate,spring,Java,Hibernate,Spring,我正在尝试实现所描述的方法,但无法使其工作 编译期间没有错误,但侦听器从未触发 道: 拦截器类: public class NewEntityInterceptor extends EmptyInterceptor implements Interceptor { /** * */ private static final long serialVersionUID = 2914362528125673753L; @Override pub

我正在尝试实现所描述的方法,但无法使其工作

编译期间没有错误,但侦听器从未触发

道:

拦截器类:

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);
        }
     }
}
公共类NewEntityInterceptor扩展了EmptyInterceptor实现了Interceptor{
/**
* 
*/
私有静态最终长serialVersionUID=2914362528125673753L;
@凌驾
公共布尔值isTransient(对象n){
Logger=Logger.getLogger(getClass().getName());
试一试{
记录器。警告(“测试”);
布尔结果=Boolean.FALSE;
BaseEntity=(BaseEntity)n;

如果(entity.getId()代码中的观察很少

  • 您没有覆盖
    EmptyInterceptor
    中的任何方法。请使用示例拦截器示例进行检查

  • 提供您可以拦截的实体生命周期事件的默认实现。您需要覆盖您感兴趣的方法

  • 我不确定
    transactionManager
    是否需要任何对拦截器的引用。这纯粹是一个休眠的东西。你可以取消它。拦截器需要会话或会话工厂(你使用的是会话级拦截器)

  • 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>