首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在JPA实体中自动设置createdBy和updatedBy

在JPA实体中自动设置createdBy和updatedBy,可以通过使用Spring Boot框架中的AuditorAware接口和@EntityListeners注解实现。

首先,创建一个实现了AuditorAware接口的类,该接口用于提供创建者和更新者的信息。在这个例子中,我们将使用Spring Security来获取当前登录用户的信息。

代码语言:java
复制
@Component
public class AuditorAwareImpl implements AuditorAware<String> {

    @Override
    public Optional<String> getCurrentAuditor() {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        if (authentication == null || !authentication.isAuthenticated()) {
            return Optional.empty();
        }
        return Optional.of(((UserDetails) authentication.getPrincipal()).getUsername());
    }
}

接下来,创建一个实体监听器类,用于在实体的创建和更新事件中设置createdBy和updatedBy属性。

代码语言:java
复制
@Component
public class AuditingEntityListener {

    @Autowired
    private AuditorAwareImpl auditorAware;

    @PrePersist
    public void setCreatedBy(Object target) {
        if (target instanceof AbstractEntity) {
            AbstractEntity entity = (AbstractEntity) target;
            if (entity.getCreatedBy() == null) {
                entity.setCreatedBy(auditorAware.getCurrentAuditor().orElse(null));
            }
        }
    }

    @PreUpdate
    public void setUpdatedBy(Object target) {
        if (target instanceof AbstractEntity) {
            AbstractEntity entity = (AbstractEntity) target;
            entity.setUpdatedBy(auditorAware.getCurrentAuditor().orElse(null));
        }
    }
}

最后,在实体类中添加createdBy和updatedBy属性,并使用@EntityListeners注解将实体监听器类与实体类关联。

代码语言:java
复制
@Entity
@EntityListeners(AuditingEntityListener.class)
public class MyEntity extends AbstractEntity {

    private String someField;

    // getters and setters
}

在这个例子中,我们使用了一个抽象实体类AbstractEntity,该类包含了createdBy和updatedBy属性,以便在所有实体类中使用。

代码语言:java
复制
@MappedSuperclass
public abstract class AbstractEntity {

    @Column(name = "created_by", nullable = false, length = 50)
    private String createdBy;

    @Column(name = "updated_by", nullable = false, length = 50)
    private String updatedBy;

    // getters and setters
}

通过这种方式,在JPA实体中可以自动设置createdBy和updatedBy属性,无需在每个实体类中手动设置。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SSM 单体框架 - 教育平台后台管理系统:视频讲解

资源列表展示后,需要回显当前角色拥有的资源信息 获取当前角色拥有的资源信息步骤提示 实体类 在 ResourceCategory 类中,有一个集合,泛型为 Resource,来表示一对多关系 // 资源集合...一对多 private List resourceList = new ArrayList(); dao 层 在 RoleMapper 中需要编写两个方法 方法 1:查询当前角色拥有的资源分类信息...方法 2:查询当前角色拥有的资源信息 service 层 调用 dao 中的两个方法分别获取资源分类数据和资源数据 将资源数据封装到对应的分类下 web 层 编写一个接口,参数为角色 id 根据角色...id 查询当前角色拥有的资源信息并返回 为角色分配资源步骤提示 实体类 创建 RoleResourceRelation 类 public class RoleResourceRelation{...private List resourceIdList; // getter setter ... } 将接收的数据,交给 service 处理 接口文档 获取当前角色拥有的资源分类和资源信息

54710
  • Spring认证中国教育管理中心-Spring Data JPA 参考文档七

    审计元数据不一定需要存在于根级实体中,但可以添加到嵌入式实体中(取决于实际使用的存储),如下面的截图所示。 示例 113....JPA审计 常规审计配置 Spring Data JPA 附带一个实体侦听器,可用于触发审计信息的捕获。...auditorProvider() { return new AuditorAwareImpl(); } } 如果您向 公开类型AuditorAware为 的bean ApplicationContext,审计基础结构会自动选取它并使用它来确定要在域类型上设置的当前用户...使用JpaContext在自定义实现 当使用多个EntityManager实例和自定义存储库实现时,您需要将正确的连接EntityManager到存储库实现类中。...JPA 映射文件的类路径扫描 一个普通的 JPA 设置需要在orm.xml.

    1K20

    jdbc java_Springdata

    object)在JPA中叫做repository,请遵守这个规范,就像mybaits的dao叫mapper一样。...创建数据库和表 复习一下oracle建数据库和表的操作吧 1.创建数据库 Jpa支持mySQL和Oracle数据库,这里使用Oracle做例子 mysql数据库也就实体类的主键声明和使用的桥接器不同,之后的章节会做具体解释...指定实体类和表之间的对应关系 name:指定数据库表的名称 @EntityListeners 在实体类增删改的时候监听,为创建人/创建时间等基础字段赋值 value:指定监听类 @Id 指定当前字段是主键..., name是提交的数据, 版本号自动插入为0, createdBy,lastUpdatedBy由于还未配置完整,暂时没有数据, createdDate,lastUpdatedDate在插入时皆为当前时间...和createdDate别看没变,是因为前端传的字段中带了值,如果不传值,数据库会被清成null,切记切记, lastUpdatedBy和lastUpdatedDate不需要管,传不传值都会自动更新。

    1K10

    手把手教你从零开始搭建SpringBoot后端项目框架

    在左侧的列表中的选择Maven项目,点击Next。 填写GroupId和ArtifactId 什么是GroupId和ArtifactId?大家可以参考一下google出来的定义,可以参考一下。...设置Project Name和Project Location ProjectName就写项目的名称就好。Project Location就是项目在你本地的真实路径。填好之后,点击Next。...domain模块 存放实体类 点击File -> New -> Module,在左侧的列表中选择Maven,点击Next。在ArtifactId处填 domain,一路Next。...在模块中其实是存在相互依赖关系的。 data模块依赖domain模块的实体。所以要在data文件的配置文件中实现对domain的依赖。 打开data目录中的pom.xml文件。在下,添加如下代码。...在core的pom.xml文件中的dependencies标签中添加如下依赖。

    3.7K10

    【SpringBoot】微服务数据持久化方案(SpringBootJPA+Hiberate)

    Spring data jpa 提供如下能力: 用于自动生成大多数样板查询模式的 Repository 接口。 支持标注驱动的事务机制。 轻松审计实体。 支持分页、筛选器等。...我没有使用任何事务,因为 JpaRepository 本身在事务中工作。同样在这个简单示例中,我没有从实体中延迟加载任何属性,因此可以省略事务。...我们还可以在应用程序日志中验证 select 查询是否未使用 limit 和 offset,而不是执行 select all 。...五、审计 如果我们在 ProductService 中查看我们的保存方法,我们会将 createdOn 字段的值设置为当前日期时间,尽管演示上下文中这样做没有错,但有一种更好的方法来填充此字段,Spring...Spring data jpa 是一个大模块,并不是所有内容都可以在一篇文章中涵盖,在以后的博客中,我们将看到spring-data-jpa的更多功能。

    18110

    Spring认证中国教育管理中心-Spring Data Couchbase教程三

    如果您想要自动乐观锁定支持,您需要做的就是@Version在长字段上添加注释,如下所示: 示例 14. 具有乐观锁定的文档。...2.5.验证 该库支持 JSR 303 验证,它直接基于实体中的注释。当然,您可以在服务层中添加各种验证,但这样可以很好地与您的实际实体耦合。 要使其工作,您需要包含两个额外的依赖项。...示例验证注释 @Size(min = 10) @Field private String name; 2.6.审计 可以通过 Spring Data 审计机制自动审计实体(跟踪哪个用户创建了对象、更新了对象以及在什么时间...审核工作由标注领域有@CreatedBy,@CreatedDate,@LastModifiedBy和@LastModifiedDate。持久化实体时,框架将自动在这些字段上注入正确的值。...3.1配置 要自动生成的键应使用 注释@GeneratedValue。默认策略是USE_ATTRIBUTES. 密钥的前缀和后缀可以作为实体本身的一部分提供,这些值不会持久化,它们仅用于密钥生成。

    1.8K30

    SpringBoot之使用jpahibernate

    图2.1     bootstrap.yml内容如下,我们不需要手动创建数据库表,jpa/hiberate会自动会为我们创建的 server: port: 9092 servlet: context-path...3、代码详解     List-3.1 BaseEntity的内容,所有的实体都要继承这个类 import lombok.Data; import org.springframework.data.annotation.CreatedBy...= userRepository.save(user); log.info("返回,{}", save); return save; } } 4、验证     在浏览器地址栏中输入...,我们不需要手动去创建,我们修改实体的时候,系统会自动更新数据库中的表结构。...所有实体都继承BaseEntity,那么每个实体对应的数据库表,在创建日期、更新日期等共有属性都同一了,这样在一定程度上便于代码理解和系统维护。

    1.1K10

    Jpa配置实体类创建时间更新时间自动赋值,@CreateDate,@LastModifiedDate

    操作数据库映射实体类时,通常需要记录createTime和updateTime,如果每个对象新增或修改去都去手工操作创建时间、更新时间,会显得比较繁琐。...Springboot jpa提供了自动填充这两个字段的功能,简单配置一下即可。...@CreatedDate、@LastModifiedDate、@CreatedBy、@LastModifiedBy前两个注解就是起这个作用的,后两个是设置修改人和创建人的,这里先不讨论。...首先,我们的很多实体类都是需要创建时间和更新时间的,我们不想在每个实体类里都去定义这两个字段,那么我们把它抽取到基类中,让实体类去继承它。...可以看到已经被自动赋值了。 然后试试update,将上面的update的注释放开。 ? 可以看到更新时间也自动修改了。

    5.1K50

    Spring Data JPA 的时间注解:@CreatedDate 和 @LastModifiedDate

    选择 Spring Data JPA 框架开发时,常用在实体和字段上的注解有@Entity、@Id、@Column等。在表设计规范中,通常建议保留的有两个字段,一个是更新时间,一个是创建时间。...Spring Data JPA 提供了相应的时间注解,只需要两步配置,就可以帮助开发者快速实现这方面的功能。...在实体类上加上注解 @EntityListeners(AuditingEntityListener.class),在相应的字段上添加对应的时间注解 @LastModifiedDate 和 @CreatedDate...在Application启动类中添加注解 @EnableJpaAuditing @EnableJpaAuditing @SpringBootApplication public class TestApplication...还提供 @CreatedBy 和 @LastModifiedBy 注解,用于保存和更新当前操作用户的信息(如id、name)。

    6.3K30

    在seaborn中设置和选择颜色梯度

    seaborn在matplotlib的基础上进行开发,当然也继承了matplotlib的颜色梯度设置, 同时也自定义了一系列独特的颜色梯度。...在seaborn中,通过color_palette函数来设置颜色, 用法如下 >>> sns.color_palette() [(0.12156862745098039, 0.4666666666666667...该函数接受多种形式的参数 1. seaborn palette name 在seaborn中,提供了以下6种颜色梯度 1. deep 2. muted 3. bright 4. pastel 5. drak...3. husl and hsl palette seaborn支持通过色相,饱和度,明度来设置颜色,具体的是通过husl_palette和hsl_palette两个子函数来实现,用法如下 >>> fig...4. cubehelix palette 通过子函数cubehelix_palette来实现,创建一个亮度线性变化的颜色梯度,在color_palette中,通过前缀ch:来标识对应的参数,用法如下 >

    3.8K10

    Spring Data JPA 时间注解:@CreatedDate 和 @LastModifiedDate

    选择 Spring Data JPA 框架开发时,常用在实体和字段上的注解有@Entity、@Id、@Column等。在表设计规范中,通常建议保留的有两个字段,一个是更新时间,一个是创建时间。...Spring Data JPA 提供了相应的时间注解,只需要两步配置,就可以帮助开发者快速实现这方面的功能。...在实体类上加上注解 @EntityListeners(AuditingEntityListener.class),在相应的字段上添加对应的时间注解 @LastModifiedDate 和 @CreatedDate...在Application启动类中添加注解 @EnableJpaAuditing @EnableJpaAuditing @SpringBootApplication public class TestApplication...还提供 @CreatedBy 和 @LastModifiedBy 注解,用于保存和更新当前操作用户的信息(如id、name)。

    4.4K10

    接近8000字的SpringSpringBoot常用注解总结!安排!

    @Autowired 自动导入对象到类中,被注入进的类同样要被 Spring 容器管理比如:Service 类注入到 Controller 类中。...@RestController @RestController注解是@Controller和@ResponseBody的合集,表示这是个控制器 bean,并且是将函数的返回值直 接填入 HTTP 响应体中...JPA 相关 8.1. 创建表 @Entity声明一个类对应一个数据库实体。...insert 的时候,会设置值 @CreatedBy :表示该字段为创建人,在这个实体被 insert 的时候,会设置值 @LastModifiedDate、@LastModifiedBy同理。...在@Transactional注解中如果不配置rollbackFor属性,那么事物只会在遇到RuntimeException的时候才会回滚,加上rollbackFor=Exception.class,可以让事物在遇到非运行时异常时也回滚

    2.1K21

    一个迟来的赞,送给JPA。AbstractEntity需要准备些什么?

    标注为@MappedSuperclass的类将不是一个完整的实体类,不会映射到数据库表,但是它的属性都将映射到子类的数据库字段中。放在这里再合适不过了。...但JPA内部其实是有很多附加变量的,比如hibernateLazyInitializer。 为了让实体在json序列化的时候能够正常进行,需要忽略这两个字段。...在直接使用之前,我们还做了一点小处理。当我们判断实体的ID为空的时候,才使用雪花算法构造一个新的ID;否则使用实体原来设置好的ID,保持不变。 为什么这样做?因为这是有需求的。...自动填充字段 上面说到createdDate和lastModifiedDate两个字段,其实在使用的时候,是不需要手动去设值的。这两个值,将通过审计功能自动完成。...所以这个系列还有@CreatedBy注解,用来标注是谁创建的。你需要在代码中组装它们,比如下面的代码,就是从Spring Sercurity中获取用户信息。

    1.5K10

    浅析深度学习在实体识别和关系抽取中的应用

    命名实体识别是NLP领域中的一些复杂任务的基础问题,诸如自动问答,关系抽取,信息检索等 ,其效果直接影响后续处理的效果,因此是NLP研究的一个基础问题。...隐马尔可夫模型(HMM)主要利用Viterbi算法求解命名实体类别序列,在训练和识别时的效率较高且速度较快。...一般传统的串联抽取方法是在实体抽取的基础上进行实体之间关系的识别。在这种方法中,先期实体识别的结果会影响到关系抽取的结果,前后容易产生误差累积。...在论文《A neural joint model for entity and relation extraction from biomedical text》中,作者将联合学习的方法用于生物医学实体识别和关系抽取当中...总结 3 参数共享的方法越来越多的被用于基于神经网络的实体识别和关系抽取联合学习中,这种方法在多任务中有着广泛的应用且简单容易实现。

    1.9K80
    领券