2023年2月15日 作者 zeroheart

jpa增加一个拦截器

参考:(34条消息) Hibernate拦截器字段加密解密_我是大大大大师兄的博客-CSDN博客_hibernate 拦截器

1.增加一个jpa的拦截器
2.参考:https://blog.csdn.net/C_tongxue/article/details/124621259
3.nacos 增加配置如下
spring:
  jpa:
    properties:
      hibernate:
        session_factory:
          interceptor: xxx.xxx.xxx

代码如下:

package com.xxx.xxx;

import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.hibernate.EmptyInterceptor;
import org.hibernate.type.Type;
import org.springframework.stereotype.Component;
import java.io.Serializable;
/**
 * YqInterceptor
 *
 * @author zeroheart
 * @since 2023/2/15
 */
@Component
@Slf4j
public class YqInterceptor extends EmptyInterceptor {
    /**
     * 更新时调用
     *
     * @param entity        实体类
     * @param id            主键
     * @param currentState  当前实体类对应的值
     * @param previousState 修改前实体类对应的值
     * @param propertyNames 字段名
     * @param types         实体类每个属性类型对应hibernate的类型
     * @return true | false true才会修改数据
     */
    @Override
    public boolean onFlushDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types) {
        log.error("onFlushDirty");
        log.error("propertyNames:"+ JSON.toJSONString(propertyNames));
        log.error("currentState:"+JSON.toJSONString(currentState));
        log.error("previousState:"+JSON.toJSONString(previousState));
        return super.onFlushDirty(entity, id, currentState, previousState, propertyNames, types);
    }

    /**
     * 加载时调用
     *
     * @param entity        实体类
     * @param id            主键
     * @param state         实体类对应的值
     * @param propertyNames 字段名
     * @param types         实体类每个属性类型对应hibernate的类型
     * @return true | false true才会修改数据
     */
    @Override
    public boolean onLoad(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) {
        log.error("onLoad");
        log.error("propertyNames:"+JSON.toJSONString(propertyNames));
        log.error("state:"+JSON.toJSONString(state));
        return super.onLoad(entity, id, state, propertyNames, types);
    }

    /**
     * 保存时调用
     *
     * @param entity        实体类
     * @param id            主键
     * @param state         实体类对应的值
     * @param propertyNames 字段名
     * @param types         实体类每个属性类型对应hibernate的类型
     * @return true | false true才会修改数据
     */
    @Override
    public boolean onSave(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) {
        log.error("onSave");
        log.error("propertyNames:"+JSON.toJSONString(propertyNames));
        log.error("state:"+JSON.toJSONString(state));
        return super.onSave(entity, id, state, propertyNames, types);
    }
}