我使用的是Spring数据JDBC。
我有一个实体,其中的字段用@CreatedDate和
@LastModifiedDate注释。
但是,在某些情况下,我希望手动设置这两个字段。
在某些情况下,是否有办法绕过CreatedDate和LastModifiedDate,而不从实体中删除注释?或者在保存实体之前是否可以添加回调?
如果你在Spring靴上使用上述解决方案,就可以了。但是,在使用EnableJdbcAuditing时,应该删除EnableJdbcAuditing。如果它使用该选项,则会在ApplicationContext上复制“RelationalAuditionCallback”。
这是一个基于Jens Schauder想法的测试。https://github.com/yangwansu/try-spring-data-jdbc/blob/main/src/test/java/masil/example/springdata/jdbc/ch9_14_1/ManuallySetupTest.java
通过RelationalAuditingCallback和IsNewAwareAuditingHandler填充审核信息。
第一个基本上是模块特定部分的适配器(本例中为Spring数据关系),而第二个修改实体。
您可以实现自己的变体IsNewAwareAuditingHandler,将其填充到一个RelationalAuditingCallback中,并将其注册为bean。不久前,我在GitHub上的这个项目中做了类似的事情:
@Bean
RelationalAuditingCallback isNewAwareAuditingHandler(JdbcMappingContext context) {
return new RelationalAuditingCallback(new CustomAuditingHandler(context));
}
private static class CustomAuditingHandler extends IsNewAwareAuditingHandler {
public CustomAuditingHandler(JdbcMappingContext context) {
super(PersistentEntities.of(context));
}
@Override
public Object markAudited(Object source) {
if (!(source instanceof Product)) {
return source;
}
Product product = (Product) source;
if (product.createdDate == null) {
product.createdDate = Instant.now();
}
return source;
}
}
请考虑CustomAuditingHandler中的逻辑作为占位符。在那里,您应该插入您的方式来确定是否手动设置值。可能您的实体实现了一个接口,该接口以瞬态字段的形式提供该信息,或者您将该信息存储在线程局部变量中。
我在spring data jdbc中使用简单的crud操作和审计。因此,当我插入新记录时,审计工作完全正常。但是当我更新我的记录时,我的createdby和createddate设置为null。有什么方法可以避免修改这些列吗? 注意:column(可更新= false)特性不支持spring data jdbc。 我的审计实体如下所示: 以及使用@EnableJdbcAuditing和定义下面的
我正在尝试将与spring-data-jdbc和PostgreSQL数据库结合使用,以跟踪首次创建表条目的时间。当插入新行时,这有效(它正确地将其设置为当前日期),但是在更新条目时,我得到异常,因为它被设置为null,这是我的配置不允许的。 这是我的实体(省略了其他不相关的字段): 这是我的存储库: 这是相关的配置: 使用方法,第一次正确设置了。当使用相同的方法更新现有实体时,当我希望跳过字段时,
问题内容: 我的问题与[1]或[2]中描述的相同。我需要手动设置默认情况下自动生成的值(为什么?导入旧数据)。如[1]中所述,使用可以解决问题。 对我来说不幸的是事实并非如此。我既未收到错误也未收到其他任何警告。该实体只是不会出现在数据库中。我正在使用Spring和Hibernate EntityManager 3.5.3-Final。 问题答案: 它可以通过以下代码在我的项目中运行: 和 在这里
我正在使用Spring-Boot 2.5.0和MongoDB来持久化一些文档。这里是Github项目。 对于每个文档,我还需要自动保存一些审计信息,因此我扩展了以下类: 例如。让我们考虑类: 我遇到的问题是,当我通过JSON更新文档时,我能够更改/覆盖CreatedBy和CreatedDate字段的值。 这意味着,如果未提供字段,则结果值将保存为null,否则,它将为创建者和创建的字段保存新值。
我的观点中有一个功能。py,它将数据插入表1,但表1中的一个字段是另一个表(称为表2)主键的外键。 注:-表2目前为空(无数据)。 现在,我只想检查数据是否正确地插入到表1中,因此,我跳过了Django ORM中的外键,但是我得到了类似“列中的Null值”name“违反了notnull约束”这样的错误 有人能告诉我一个绕过这个(或)任何新方法的方法吗。
问题内容: 是否有可能绕过Hibernate中的ID,在大多数情况下,我们希望使用来设置ID ,但在某些情况下希望手动设置ID。 这可能吗? 问题答案: 我知道您可以在JPA规范中执行此操作,因此您应该能够在Hibernate中(使用JPA +批注)。 如果仅填写要创建的新持久性模型的ID字段,那么当您将该模型“合并”到EntityManager中时,它将使用您设置的ID。 但是,这确实有后果。您