【问题标题】:Spring data mongodb auditing not working.. (Java config)Spring数据mongodb审计不起作用..(Java配置)
【发布时间】:2014-12-30 23:58:09
【问题描述】:

我目前正在使用 Spring data mongodb 1.6.0-RELEASE,我知道它具有审计功能。一世 将@EnableMongoAuditing 注释放在我的配置类之上。我的豆子在下面:

@Document
public class MyBean{

@Id
private AnotherCustomBean anotherCustomBean = new AnotherCustomBean();

@CreatedDate
private Date creationDate;

@LastModifiedDate
private Date lastModifiedDate;

.
.
.

当我用 mongoTemplate.save(myBean); 保存这个 bean 时,它没有设置创建日期和最后修改日期...而且它没有错误。

任何帮助将不胜感激,

谢谢。

【问题讨论】:

  • 我认为你应该将这个属性添加到你的 bean 中,所以我们需要告诉 Spring 谁是当前正在保存的属性。@CreatedBy private String createdBy;另一个想法是,可以有选择地应用注释,具体取决于您想要捕获的信息。对于捕获时间点的注释,可用于 JodaTimes DateTime、遗留 Java 日期和日历、JDK8 日期/时间类型以及 long/Long 类型的属性
  • 其实@CreatedBy 注解不是强制性的,joda-time 也已经在类路径上,所以应该没问题。

标签: java spring mongodb spring-mvc spring-data-mongodb


【解决方案1】:

实际的问题是@Id 注释。要正确使用spring审计,你必须定义一个ObjectId(新保存的对象为null),这就是spring决定@LastModifiedDate@CreatedDate的方式

之后,我找到了一种方法,可以通过实现Auditable<String,String>@Id 上使用自定义bean

感谢@Felby:

我发现save()的时候@Id字段需要为null 仅适用于 @CreatedDate 和 @CreatedBy 注释。这 @LastModifiedDate 和 @LastModifiedBy 字段在任何情况下都有效 @Id 字段是否已初始化。

【讨论】:

  • 我发现@Id字段在save()时需要为null,只有@CreatedDate@CreatedBy注解。无论@Id 字段是否已初始化,@LastModifiedDate@LastModifiedBy 字段都有效。
【解决方案2】:

我不太清楚,但尝试将 joda-time 添加到类路径以使用与日期相关的审计注释

<dependency>
    <groupId>joda-time</groupId>
    <artifactId>joda-time</artifactId>
    <version>2.2</version>
</dependency>

【讨论】:

    猜你喜欢
    • 2015-01-20
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 2015-04-15
    • 2018-04-02
    相关资源
    最近更新 更多