2014-11-04 21 views
10

Attualmente sto usando Spring data mongodb 1.6.0-RELEASE e so che ha funzione di auditing. I inserire annotazione @EnableMongoAuditing sopra la mia classe di configurazione. E il mio fagiolo è qui sotto:Spring data mongodb auditing not working .. (Java config)

@Document 
public class MyBean{ 

@Id 
private AnotherCustomBean anotherCustomBean = new AnotherCustomBean(); 

@CreatedDate 
private Date creationDate; 

@LastModifiedDate 
private Date lastModifiedDate; 

. 
. 
. 

quando salvo questo fagiolo con mongoTemplate.save(myBean); non è l'impostazione data di creazione e la data dell'ultima modifica ... e non ha errori.

Qualsiasi aiuto sarebbe apprezzato,

Grazie.

+0

Penso che dovresti aggiungere questa proprietà nel tuo bean, quindi dobbiamo dire a ** Spring ** che è una proprietà di salvataggio corrente. @ CreatedBy private String createdBy; Un'altra idea, le annotazioni possono essere applicate in modo selettivo, a seconda delle informazioni che desideri acquisire. Per le annotazioni che catturano i punti nel tempo può essere utilizzato su proprietà di tipo JodaTimes DateTime, data e calendario Java precedenti, tipi di data/ora JDK8 nonché lungo/lungo –

+0

In realtà l'annotazione @CreatedBy non è obbligatoria, anche joda-time è attivo classpath già così non dovrebbe essere un problema. –

risposta

5

Il vero problema era il @Id annotazione. Per utilizzare primavera auditing correttamente, è necessario definire un ObjectId (null per i nuovi oggetti salvati), thats come la primavera decidere @LastModifiedDate e @CreatedDate

In seguito, ho trovato un modo per rendere possibile fagioli uso personalizzati su @Id mediante l'attuazione di Auditable<String,String>

Grazie a @Felby:

ho trovato che il campo @Id doveva essere nulla al momento della save() solo per il @CreatedDate e le annotazioni @CreatedBy. I campi @LastModifiedDate e @LastModifiedBy hanno funzionato indipendentemente da se il campo @Id è stato inizializzato o meno.

+3

Ho trovato che il campo '@ Id' doveva essere' nullo' al momento di 'save()' solo per le annotazioni '@ CreatedDate' e' @ CreatedBy'. I campi '@ LastModifiedDate' e' @ LastModifiedBy' funzionavano indipendentemente dal fatto che il campo '@ Id' fosse inizializzato o meno. – Felby

0

non so esattamente, ma provare ad aggiungere Joda-time per classpath per usare correlate alla data di revisione annotazioni

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