2014-11-04 3 views
10

В настоящее время я использую Spring data mongodb 1.6.0-RELEASE, и я знаю, что у него есть функция аудита. I положить @EnableMongoAuditing аннотация поверх моего класса конфигурации. И мой боб ниже:Весенние данные mongodb аудит не работает .. (Java config)

@Document 
public class MyBean{ 

@Id 
private AnotherCustomBean anotherCustomBean = new AnotherCustomBean(); 

@CreatedDate 
private Date creationDate; 

@LastModifiedDate 
private Date lastModifiedDate; 

. 
. 
. 

Когда я сохранить этот компонент с mongoTemplate.save(myBean); это не установка дате создания и дату последнего изменения ... И это не имеет ошибок.

Любая помощь была бы оценена,

Спасибо.

+0

Я думаю, вы должны добавить это свойство в свой bean-компонент, поэтому нам нужно указать ** Spring **, который является текущим сохраняющим свойством. @ CreatedBy private String createdBy; Другая идея, аннотации могут применяться выборочно, в зависимости от того, какую информацию вы хотите захватить. Для аннотаций, фиксирующих точки во времени, можно использовать свойства типа JodaTimes DateTime, устаревшие даты и календарь Java, типы даты и времени JDK8, а также длинные/длинные –

+0

Фактически аннотация @CreatedBy не является обязательной, также время joda classpath уже так не должно быть проблемой. –

ответ

5

Реальная проблема была @Id аннотаций. Чтобы использовать родниковую аудит должным образом, вы должны определить ObjectId (NULL для новых сохраненных объектов), то как весна решить @LastModifiedDate и @CreatedDate

Затем я нашел способ, чтобы сделать возможным использование пользовательских бинов на @Id путем внедрения Auditable<String,String>

Благодаря @Felby:

Я обнаружил, что @Id поля нужно быть пустым во время сохранения() только для @CreatedDate и @CreatedBy аннотаций. Поля @LastModifiedDate и @LastModifiedBy работали независимо от независимо от того, было ли поле @Id инициализировано или нет.

+3

Я обнаружил, что поле '@ Id' должно быть' null' во время 'save()' только для аннотаций '@ CreatedDate' и' @ CreatedBy'. Поля '@ LastModifiedDate' и' @ LastModifiedBy' работали независимо от того, было ли инициализировано поле '@ Id' или нет. – Felby

0

Я не знаю точно, но попробуйте добавить Joda времени в пути к классам, чтобы использовать аудиторские аннотаций даты, связанные с

<dependency> 
    <groupId>joda-time</groupId> 
    <artifactId>joda-time</artifactId> 
    <version>2.2</version> 
</dependency> 
Смежные вопросы