我们刚刚开始使用Hibernate Envers,它可以很好地记录更改的内容,但是,有没有一种方法可以在更改发生时记录?
那么,它能否向audit表中添加一个datetime列呢?
根据Envers文档,默认情况下应该发生以下情况:
当Envers启动新的修订时,它会创建一个新的修订实体,该实体存储有关修订的信息。默认情况下,这只包括
谢谢
您需要定义一个供Envers使用的自定义RevisionEntity,以便可以添加所需的属性。需要对您假装用作自定义修订实体的类进行注释:
@RevisionEntity(AuditingRevisionListener.Class)
在这个实体中,您可以定义您需要的内容。例如,这应该是一个很好的起点:
@Entity
@Table(name = "DATA_REVIEW_TABLE")
@RevisionEntity(AuditingRevisionListener.class)
public class AuditedRevisionEntity {
@RevisionNumber
@Id
@SequenceGenerator(name = "revisionSeq", sequenceName = "REVISION_DATOS_ID_SEQ", allocationSize = 1, initialValue = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "revisionSeq")
private int id;
@RevisionTimestamp
private Date modifiedAt;
private String username;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Temporal(value = TemporalType.TIMESTAMP)
public Date getModifiedAt() {
return modifiedAt;
}
public void setModifiedAt(Date modifiedAt) {
this.modifiedAt = modifiedAt;
}
}
此外,还必须定义修订侦听器,以处理如何在自定义修订实体中初始化数据。您的侦听器必须实现RevisionListener。
public class AuditingRevisionListener implements RevisionListener {
private static Log log = LogFactory.getLog(AuditingRevisionListener.class.getName());
@Override
public void newRevision(Object revisionEntity) {
AuditedRevisionEntity revEntity = (AuditedRevisionEntity) revisionEntity;
String userName = null;
try {
if (SecurityContextHolder.getContext().getAuthentication() != null) {
Object principal = getCurrentUserInfo();
if (principal == null) {
userName = "system";
} else if (principal instanceof User) {
userName = ((User) principal).getUsername();
}
}
} catch (Exception e) {
log.error("Error auditing username.", e);
}
revEntity.setUsername(userName);
revEntity.setModifiedAt(new Date());
}
}
请记住这些类必须可由hibernate访问,检查以下内容:为什么hibernate Envers忽略我的自定义RevisionEntity?
根据要求,我的代码应该将ZonedDateTime参数中的日期和OffSetTime参数中的时间附加到格式“yyyy-MM-dd-HH:MM:ss.SSSz”中。然而,我没能做到这一点 我用DateTimeFormatter尝试了各种方法,包括下面的方法。 我注意到:-代码在LocalDateTime抛出“java.time.DateTimeException:无法提取值:class java.t
问题内容: 当使用日志包时,Go输出类似 如何将日期和时间格式更改为类似的格式?示例(操场链接): 问题答案: 就像yed posterior所说,您可以通过实现write函数来定义自定义io.Writer。您可能还想做一个log.SetFlags(0)来完全控制。这是一个更改日期格式以及添加一些日志级别信息的示例。 输出: 2016-03-21T19:54:28.563Z [DEBUG]这已被记
问题内容: 如何获得两个工作日之间的工作天数,即不包括周末和节假日?假期是指法律认可的假期。由于每个国家/地区的假期不同,因此必须取决于国家/地区。 例如,由于介于两者之间的周末,应返回而不是。 我已经看过Jollyday和ObjectLab- Kit ,但是我不能让它们满足我的需要。我的意思是,他们两个都有很多有趣的方法,但是找不到类似…的东西。 问题答案: 最后是基于API 的解决方案: 致电
问题内容: 现在,我的构建过程使用MS Build从源进行构建,并在构建过程中执行自定义程序。我在程序中写入控制台的所有内容都记录在控制台输出中。 但是,我也想在用户界面的“更改”和/或“状态”部分中记录一些条目(类似于SVN所做的事情)。 如何才能做到这一点? 问题答案: // This is a deliciously convoluted and fragile hack to force
问题内容: 我需要计算两个日期之间的营业日。例如:我们7月4日放假。所以如果我的日期是date1 = 07/03/2012 date2 = 07/06/2012 由于7月4日为节假日,因此,这些日期的黑白工作日应该为1。 我有一种下面的方法来计算工作日,该工作日仅计算周末,而不计算假期。还有什么方法可以计算假期吗....请帮我。 问题答案: 假设您有一个包含所有假期的列表。 只需在您的条件中添加条
当node_module库导入索引文件时,webpack为什么不在构建中包含这些库? webpack对我来说仍然是一种黑色的艺术,我还没有完全掌握,所以下面是我试图实现的一个解释。 我正在构建一个测试应用程序,以在AWS Lambda节点服务器上作为无服务器代码运行。目标是通过在服务器上有一个或多个块并且没有node_modules文件夹,使部署包尽可能小。 我正在用TypescriptV3编写文