首页 > 其他分享 >hibernate不同实体不同填充创建人

hibernate不同实体不同填充创建人

时间:2024-08-01 17:17:18浏览次数:6  
标签:hibernate obj 填充 void entity class BaseEntity 创建人 public

hibernate不同实体不同填充创建人

使用的el-admin框架,框架本身填充的使用@CreatedBy注解加上AuditingEntityListener,

@CreatedBy
@Column(name = "create_by", updatable = false)
@ApiModelProperty(value = "创建人", hidden = true)
private String createBy;


@Component("auditorAware")
public class AuditorConfig implements AuditorAware<String> {

    /**
     * 返回操作员标志信息
     *
     * @return /
     */
    @Override
    public Optional<String> getCurrentAuditor() {
        try {
            // 这里应根据实际业务情况获取具体信息
            return Optional.of(SecurityUtils.getCurrentUsername());
        }catch (Exception ignored){}
        // 用户定时任务,或者无Token调用的情况
        return Optional.of("System");
    }
}

但是我的项目createBy是Long类型,所以需要不同的填充方式

实体基类

@EntityListeners(CustomAuditingListener.class)
@javax.persistence.MappedSuperclass
@Data
@Accessors(chain = true)
public class BaseEntity implements Serializable {

	/**
	 * 创建人id
	 */
	@Column(name = "create_id")
	protected Long createId;

}

主要是加入 @EntityListeners(CustomAuditingListener.class)

实现CustomAuditingListener

@Configurable
public class CustomAuditingListener implements ConfigurableObject {

    public CustomAuditingListener() {
    }

    @Autowired
    private AuditHandler auditHandler;

    @PrePersist
    private void prePersist(Object obj) {
        auditHandler.prePersist(obj);
    }
    @PreUpdate
    private void preUpdate(Object obj) {
        auditHandler.preUpdate(obj);
    }
}

AuditHandler接口

public interface AuditHandler {
    void prePersist(Object obj);

    void preUpdate(Object obj);
}


@Component
public class CustomAuditHandler implements AuditHandler {

    @Override
    public void prePersist(Object obj) {
        if (obj instanceof BaseEntity) {
            BaseEntity entity = (BaseEntity) obj;
            if (entity.getCreateId() == null) {
                this.markForCreate(entity);
            }
            entity.setCreateTime(new Date());
            entity.setDataStatus(1);
        }
    }

    @Override
    public void preUpdate(Object obj) {
        if (obj instanceof BaseEntity) {
            BaseEntity entity = (BaseEntity) obj;
            if(entity.getUpdateId() == null){
                this.markForUpdate(entity);
            }
            entity.setUpdateTime(new Date());
            entity.setDataStatus(1);
        }
    }

    public void markForCreate(BaseEntity entity) {
        Long userId = getLoginUserId();
        entity.setCreateId(userId);
    }

    public void markForUpdate(BaseEntity entity) {
        // TODO 问题 https://stackoverflow.com/questions/54041338/stackoverflow-on-preupdate
        Long userId = getLoginUserId();
        entity.setUpdateId(userId);
    }

    private static Long getLoginUserId() {
        JwtUserDto userCache = SpringUtil.getBean(UserCacheManager.class).getUserCache(SecurityUtils.getCurrentUsername());
        Long userId = Optional.ofNullable(userCache).map(e -> e.getUser()).map(e -> e.getId()).orElse(null);
        return userId;
    }
}

标签:hibernate,obj,填充,void,entity,class,BaseEntity,创建人,public
From: https://www.cnblogs.com/ntmd32/p/18336812

相关文章

  • 手写 Hibernate ORM 框架 05-基本效果测试
    手写Hibernate系列手写HibernateORM框架00-hibernate简介手写HibernateORM框架00-环境准备手写HibernateORM框架01-注解常量定义手写HibernateORM框架02-实体Bean定义,建表语句自动生成手写HibernateORM框架03-配置文件读取,数据库连接构建手写Hi......
  • javaweb面向切面aop编程-实现自定义填充
    实现自定义填充注解@AutoFill创建annotation包,编写注解类点击查看代码/***自定义注解,用于标识某个方法需要进行功能字段自动填充处理*/@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public@interfaceAutoFill{//数据库操作类型:UPDATEINSE......
  • 如何处理一维 CNN 中的零填充序列以避免对填充长度的依赖?
    我正在使用以下1DCNN模型根据时间序列数据进行特征预测任务:importtorchimporttorch.nnasnnimporttorch.nn.functionalasFclassMy1DCNN(nn.Module):def__init__(self):super(My1DCNN,self).__init__()self.conv1=nn.Conv1d(in_channe......
  • 在 Django 中注册时未填充国家/地区字段
    当用户注册时,我想将他们的国家/地区添加到他们的个人资料中。但是,该字段在数据库中仍为空白,并且不会填充国家/地区。我是Django中的身份验证新手,因此其他方面可能是错误的。我认为顺序可能是问题所在?我真的不确定。Views.pydefget_country(ip):ifipin['127.0.0......
  • 属性填充底层源码深入剖析前戏
    属性填充底层源码深入剖析前戏方式一:使用set方式注入创建两个类:packagecom.coding.spring.practies;publicclassTestDIBean{ publicStringsay(){ return"IamTestDIBean.say()"; }}packagecom.coding.spring.practies;publicclassTestDIBean2{ priva......
  • Tkinter 的 Entry 小部件中的“额外填充”是什么?
    采取这个简单的代码:importosimporttkinterastkroot_window=tk.Tk()root_window.geometry("200x200")root_window.columnconfigure(0,weight=1)root_window.columnconfigure(1,weight=1)root_window.rowconfigure(0,weight=1)foo=tk.Canvas(root_win......
  • 用于获取半径内邮政编码的 Python 脚本无法正确填充 CSV
    我正在尝试编写一个Python脚本,该脚本读取包含邮政编码的CSV文件,使用API获取半径内的邮政编码,然后将结果填充到CSV中的新列中。API请求似乎工作正常,我可以在控制台输出中看到响应。但是,生成的CSV文件在radius_zips列中没有预期的值。这是我当前的脚本:......
  • 如何根据现有数据之间的关系填充缺失值
    问题如何根据现有的前一行(商品的预测)与另一列中关联的现有值(商品的实际值)之间的关系来填充pandas数据框的缺失值。详细信息|||我有一个包含10列和40行的pandas数据框。这些列直至Date,Actual,time_from_actual_1,time_from_actual_2,time_from_act......
  • 如何填充用 geopandas 溶解地理数据框时创建的多多边形中的孔?
    我的目标是绘制MSOA(英国的连续地理单位)集群的边界,为此我从此处下载了MSOA边界的shapefile。然后,我添加一列簇标签并使用geopandas进行溶解。df.dissolve(by='label',aggfunc='sum')当我使用Folium绘制时,有多个内孔,如附图所示。我该如何删除这些?#create......
  • 我正在尝试理解 lambda...为什么当列表已由 lambda 填充时我不能直接打印列表?
    以下是我在学习网站上找到的代码。callables=[]foriin(1,2,3):callables.append(lambdaa=i:a)forfincallables:print(f())为什么我们不能只打印可调用列表print(callables)如果我这样做print(callables)相反,我得到的输出如下:[......