Java 在Spring数据中,JDBC绕过@CreatedDate和@LastModifiedDate

Java 在Spring数据中,JDBC绕过@CreatedDate和@LastModifiedDate,java,spring,annotations,spring-data,spring-data-jdbc,Java,Spring,Annotations,Spring Data,Spring Data Jdbc,我正在使用 我有一个实体,它的字段用and注释 但是,在某些情况下,我希望手动设置这两个字段 在某些情况下,是否有办法绕过@CreatedDate和@LastModifiedDate,而不从实体中删除注释?或者在保存实体之前是否可以添加回调?填充审核信息由和完成 第一个基本上是模块特定部分(本例中为Spring数据关系)的适配器,而第二个修改实体 您可以实现自己的IsNewAwareAuditingHandler变体将其填充到RelationalAuditingCallback中,并将其注册为b

我正在使用

我有一个实体,它的字段用and注释

但是,在某些情况下,我希望手动设置这两个字段


在某些情况下,是否有办法绕过
@CreatedDate
@LastModifiedDate
,而不从实体中删除注释?或者在保存实体之前是否可以添加回调?

填充审核信息由和完成

第一个基本上是模块特定部分(本例中为Spring数据关系)的适配器,而第二个修改实体

您可以实现自己的
IsNewAwareAuditingHandler变体
将其填充到
RelationalAuditingCallback
中,并将其注册为bean。不久前,我也做过类似的事情:

@Bean
RelationalAuditingCallback isNewAwareAuditingHandler(JdbcMappingContext上下文){
返回新的RelationalAuditingCallback(新的CustomAuditingHandler(上下文));
}
私有静态类CustomAuditingHandler扩展了IsNewAwareAuditingHandler{
公共CustomAuditingHandler(JdbcMappingContext){
超级(上下文的持久性);
}
@凌驾
公共对象标记(对象源){
if(!(产品的源实例)){
返回源;
}
产品产品=(产品)来源;
if(product.createdDate==null){
product.createdDate=Instant.now();
}
返回源;
}
}

请考虑代码< CustomAuditingHandler > <代码>位置持有者的逻辑。在那里,您应该以自己的方式确定是否手动设置该值。可能您的实体实现了一个接口,该接口将该信息作为一个临时字段提供,或者您将该信息存储在一个线程局部变量中。

如果您在spring boot上使用上述解决方案,就可以了。但是在使用
@EnableJdbcAuditing
时,您应该删除
@EnableJdbcAuditing
。 如果使用该选项,则会在ApplicationContext上复制
RelationalAuditionCallback

这是一个基于@Jens Schauder想法的测试。

您是否检查了@PrePersist和@PreUpdate@Aksapy
@Prepersist
@PreUpdate
是JPA注释,对Spring数据JDBC实体没有任何影响。@Aksapy我也不想在可能的情况下修改实体类。不幸的是,
beforesavevent
没有帮助。