2013-05-21 7 views
9

Ich verwende Spring-Daten mit Mongodb, um binäre Daten wie Bilder usw. Ich möchte ein Versionsfeld an die URL anzuhängen, um den Browser von Caching Bilder zu betrügen .Spring Data Version Annotation nicht inkrementieren bei der Verwendung auf einer Mongo-Sammlung

mein Dokument Basisklasse Siehe unten:

import org.springframework.data.annotation.Id; 
import org.springframework.data.annotation.Version; 
import org.springframework.data.mongodb.core.index.Indexed; 

public abstract class BaseDocument { 

    @Id 
    @Indexed(unique=true) 
    protected long id; 
    protected byte[] data; 
    protected String mimeType; 
    protected String filename; 
    protected String extension; 
    @Version 
    private Long version; 

Ich habe auch ein Repository Verpackung MongoOperations für meine Dokumente zu speichern.

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Repository; 

@Repository 
public class DocumentRepository implements IDocumentRepository { 

    @Autowired 
    private MongoOperations mongoTemplate; 

    @Override 
    public <D extends BaseDocument> void saveDocument(D document) { 
     mongoTemplate.save(document); 
    } 

In einem Versuch, die Versionierung umzusetzen, habe ich einige der Jagd um und fand, dass es eine @Version Annotation für das Frühjahr Mongo war, aber das ist veraltet war. Ich entdeckte dann, dass stattdessen die Spring Data @Version Annotation verwendet werden sollte. Also ging ich voran und nutzte die Spring Data @Version Annotation.

Ich erwarte, dass mein Versionsfeld jedes Mal erhöht wird, wenn ich mein Dokument speichere. Ich überschreibe das gleiche Dokument mehrmals, aber mein Versionsfeld wird nicht wie erwartet inkrementiert.

Mache ich etwas falsch oder gibt es etwas Zusätzliches, das ich tun muss?

Antwort

10

Um @Version Anmerkung Sie durch Hinzufügen einer Zeile zu Ihrem Anwendungskontext in Spring Data MongoDB aktivieren Sie die Überwachung verwenden müssen:

<mongo:auditing /> 
+0

Hallo Maciej. Ich habe das versucht, aber ich bekam den folgenden Fehler von meiner Idee "Der passende Platzhalter ist streng, aber für das Element mongo: auditing kann keine Deklaration gefunden werden", habe ich auf 1.2.1 hochgezählt und referenziere den 1.2.xsd, wo das Auditing-Element ist Geschenk. Dies hat die IDE davon abgehalten, den Fehler zu geben, aber ich erhalte immer noch diesen Fehler bei 'org.xml.sax.SAXParseException; Zeilennummer: 70; Spaltennummer: 23; cvc-complex-type.2.4.c: Der passende Platzhalter ist strikt, aber es kann keine Deklaration für das Element 'mongo: auditing'-Kompilierzeit gefunden werden. Irgendwelche weiteren Vorschläge? –

+2

Sie benötigen die neueste Version von Spring Data MongoDB - 1.2.1 auf Ihrem Klassenpfad. Wenn eine Ausnahme immer noch kommt, überprüfen Sie meine Erklärung, wie man Auditing verwendet: http://maciejwalkowiak.pl/blog/2013/05/24/auditing-entities-in-spring-data-mongodb/. Wenn Sie immer noch Probleme haben, Ihre gesamte XML-Konfiguration hier einzufügen –

+0

Vielen Dank für all Ihre Hilfe Maciej, ich habe es geschafft, es zur Arbeit zu bringen. Nachdem ich deinen Blog gelesen habe, spiele ich auch mit den anderen Prüfungsfeldern herum. –