2016-07-26 9 views
2

Kann mir jemand anhand eines Beispiels erklären, warum die @Transient-Annotation in JPA auch @Target Methode hat?Warum JPA Transient Annotation Methode in Target?

Ich beziehe mich auf Dokumentation http://docs.oracle.com/javaee/5/api/javax/persistence/Transient.html

@Target (Wert = {METHODE, FIELD})

Vielen Dank im Voraus!

+0

Sie können transient Attribut von Getter-Methode oder Feld zugreifen, deshalb hat es – Saravana

+0

Wie macht es Sinn, es auf Methoden zu erlauben? erlaubt nur auf Felder sollte nicht genug sein? – user2906555

+0

Nein, Sie können für den Zugriff auf ein Feld mit Reflektions- oder Getter-Methoden programmieren. – Saravana

Antwort

0

In JPA-Entität können Sie Felder oder Methoden (Getter) annotieren. Die @Id Annotation diktiert dies, was bedeutet, wenn Sie @Id auf ein Feld setzen, sollten alle Ihre Anmerkungen auf Felder gehen, aber wenn Sie es zum Beispiel auf @Id Long getId() setzen, dann sollten andere Anmerkungen folgen. Deshalb kann auch @Transient auf eine Methode angewendet werden.

Zum Beispiel, wenn Sie diese haben

@Id 
private Long id; 

@Transient 
private String someTransientField; 

private Long getId() { 
    return this.id; 
} 

private String getSomeTransientField() { 
    return this.someTransientField; 
} 

dann someTransientField als vorübergehende behandelt würden. Aber wenn @Id auf dem Feld bleiben würde, und Sie @Transient zu verschieben, dann würde someTransientField als persistent behandelt werden, da @Id auf dem Feld ist und daher alle anderen Anmerkungen erwartet werden, auf Feldern auch zu sein.

So ist der Fall, in dem @Transient auf dem Verfahren arbeiten würde, ist dies

private Long id; 

private String someTransientField; 

@Id 
private Long getId() { 
    return this.id; 
} 

@Transient 
private String getSomeTransientField() { 
    return this.someTransientField; 
} 
+0

Können Sie mit einem Beispiel helfen, bei dem @Transient besser für die Methode und nicht für das Feld geeignet ist? – user2906555

+0

Ich habe ein Beispiel hinzugefügt, hoffe, es macht es klar. –

+0

Das macht die Sache klar. Danke für die Antwort. – user2906555

0

@Target Anmerkung können Sie festlegen, wo diese Annotation verwendet werden können, beispielsweise die Klasse, Felder, Methoden usw. gibt an, welche Programmelement (s) können mit Instanzen des Annotationstyps kommentiert werden.

@Target(value={METHOD,FIELD}) bedeutet, dass die Annotation nur über Typen (Methoden und Felder in der Regel) verwendet werden kann. Sie können das Ziel alle zusammen verlassen, so dass die Annotation für beide Klassen, Methoden und Felder verwendet werden kann.

In JPA @Target - Markiert eine weitere Annotation @Transient, um einzuschränken, auf welche Art von Java-Elementen die Annotation angewendet werden kann.

0

Dies bedeutet, dass die Anmerkung unter Field oder method verwendet werden kann.

Wenn das Feld mit Anmerkungen versehen ist, wird das Feld durch Reflexion aufgerufen.

Wenn die Methode (Getter) mit Anmerkungen versehen ist, wird die Getter-Methode für den Zugriff verwendet.

Verwandte Themen