spring - 在实体中自动填充 created_date、last_modified_date、created_by 和 last_modified_by:使用 JPA 进行休眠
问题描述
我是 Hibernate 和 JPA 的新手。我有几个实体,每个实体都包含以下四列:
1. created_by
2. last_modified_by
3. created_date
4. last_modified_date
我希望这些列在保存关联实体时自动填充。
两个示例实体如下:
实体 1:
@Entity
@Table(name = "my_entity1")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class MyEntity1 implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;
@Column(name = "created_by")
private String createdBy;
@Column(name = "last_modified_by")
private String lastModifiedBy;
@Column(name = "created_date")
private Instant createdDate;
@Column(name = "last_modified_date")
private String lastModifiedDate;
}
实体 2:
@Entity
@Table(name = "my_entity2")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class MyEntity2 implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "description")
private String description;
@Column(name = "created_by")
private String createdBy;
@Column(name = "last_modified_by")
private String lastModifiedBy;
@Column(name = "created_date")
private Instant createdDate;
@Column(name = "last_modified_date")
private String lastModifiedDate;
}
在这种情况下,我浏览了以下帖子:如何自动生成创建或修改的时间戳字段?,如何使 created_at 列自动生成创建日期时间,就像自动创建 ID 一样?.
我正在了解如何捕获日期字段,但我无法理解如何捕获 created_by 和 last_modified_by。
解决方案
审计作者使用AuditorAware
和Spring Security
...
为了告诉 JPA 当前登录的用户,我们需要提供 AuditorAware 的实现并覆盖 getCurrentAuditor() 方法。在 getCurrentAuditor() 中,我们需要获取当前登录的用户。
像这样:
public class AuditorAwareImpl implements AuditorAware<String> {
@Override
public String getCurrentAuditor() {
return "TestUser";
// Can use Spring Security to return currently logged in user
// return ((User) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getUsername()
}
}
现在通过使用启用 jpa 审计@EnableJpaAuditing
@Configuration
@EnableJpaAuditing(auditorAwareRef = "auditorAware")
public class JpaConfig {
@Bean
public AuditorAware<String> auditorAware() {
return new AuditorAwareImpl();
}
}
看看这个以获得更多细节......
推荐阅读
- amazon-web-services - Terraform:在一个环境中构建资源
- excel - 生成数据透视表时如何在录制的宏 (VBA) 中使用动态源数据
- mysql - 从在第 3 集与其杀手一起死去的角色中获取姓名
- javascript - 渲染之间不更新状态的默认值
- ios - Xamarin.iOS 绑定库无法使用安全框架中的 SecKey API
- python - 根据列中的多个条件删除行(使用 Python)
- xamarin.forms - 集合视图中的选取器在 SelectedIndexChanged 中失去价值
- sql - 如何连接具有不同列数据类型的两个表
- mysql - WordPress + MySQL 部署在 Kubernetes - MySQL 连接错误
- python - Django将对象传递给另一种形式的模型