2013-03-30 15 views
5

Dies sollte eine einfache Sache sein! Aber bis jetzt konnte ich keine Antwort finden. Entweder ich vermisse etwas offensichtlich, oder ich vermisse etwas Offensichtliches ...Wie implementiert man eine schreibgeschützte Eigenschaft mit Spring Data?

Ich habe eine Klasse, sagen Person. Mit drei Feldern - "ID", "Name" und "Reputation". Nehmen wir an, ich bin bereit, Updates zu "Name", aber nicht zu "Reputation" zu nehmen. Ich möchte, dass Spring Data den Wert von "Reputation" beim Abrufen aus der Datenbank abruft, aber beim Speichern der Bean ignoriert.

@Transient Annotation ist da, aber Spring ignoriert das Feld vollständig und füllt es überhaupt nicht. Im Idealfall suche ich nach etwas wie @ReadOnly Annotation.

Mehr Details

  • Ich bin mit Spring Data für Neo4j, aber ich glaube, dass dies auf jeden Spring Data Geschmack gelten würde.
  • Dies ist ein Backend für Jersey/Jackson-basierten RESTful Service. ** Wenn ich die GET-Anfrage erfülle, möchte ich den "Reputation" -Wert liefern. Aber wenn ich ein PUT-Update erhalte, möchte ich es nicht nehmen. ** Bisher konnte ich Jackson Features nutzen. Aber ich würde gerne in der Lage sein, die DB zu aktualisieren, ohne das vorhandene Person-Objekt zuerst holen zu müssen.
  • Der einzige Weg, um diese Arbeit zu machen, ist, zwei Klassen zu definieren - eine mit "Reputation" -Feld und eine ohne. Aber das scheint wirklich klobig zu sein. Ist da nicht etwas einfacher?
+0

Ich habe herum gegraben und es scheint, als wäre das ganz einfach hinzuzufügen. Zum Beispiel gibt es bereits ReadOnlyRelatedToCollectionFieldAccessorFactory. Ich brauche nur so etwas für Knoteneigenschaften. Ich bin verwirrt, warum das nicht schon da ist. –

+0

Ich weiß mit Spring Data und JPA, dies wird mit einer JPA-Annotation behandelt. Neo4J ist mir völlig unbekannt, aber ich würde mit Neo4j anfangen. – Taylor

Antwort

2

Sie können eine vorübergehende Eigenschaft ohne einen Setter verwenden. Diese vorübergehende Eigenschaft würde den zu schützenden Wert der db-Eigenschaft zurückgeben.

0

können Sie @ReadOnlyProperty von org.springframework.data.annotation verwenden. Siehe ReadOnlyProperty

@ReadOnlyProperty 
private Object readOnlyValue; 
Verwandte Themen