2014-01-31 8 views
6

So habe ich gelernt, dass das Schlüsselwort in Java bedeutet, dass eine Entität nicht persistent, und dass die @Transient Annotation in JPA bedeutet nicht ein Feld in der Datenbank persistent. Aber was bedeutet es, wenn auf eine Methode und nicht auf eine Variable angewendet wird? Dies istWas bedeutet @Transient-Annotation für Methoden?

, wo ich es in unserem Code gefunden:

@Transient 
public boolean getTabFoo() { 
    if ((this.viewFoo1 != ACCESS_NONE) 
      || (this.viewFoo2 != ACCESS_NONE) || (this.viewFoo3 != ACCESS_NONE) 
      || (this.getViewFoo4() != ACCESS_NONE)) { 
     return true; 
    } 
    return false; 
} 

Antwort

6

Alle JPA-Annotationen auf Felderebene können entweder auf Felder oder auf Eigenschaften platziert werden, sie bestimmen den Zugriffstyp der Entität (d. H. Wie der JPA-Provider auf Felder dieser Entität zugreift - direkt oder mithilfe von Getter/Setter).

Der Standardzugriffstyp wird durch die Platzierung der @Id Annotation bestimmt und sollte für alle Felder der Entität (oder Hierarchie von geerbten Entitäten) konsistent sein, es sei denn, sie wird explizit von @Access für einige Felder überschrieben.

So @Transient auf Getter hat die gleiche Bedeutung wie @Transient auf Felder - wenn Standard-Zugriffstyp für Ihr Unternehmen ist Eigentum Zugang, müssen Sie alle Getter mit Anmerkungen versehen, die mit @Transient auf persistente Eigenschaften nicht entsprechen.

+0

Danke, das macht es viel klarer. Es wird also nur für eine Methode verwendet, weil es dann ein Getter ist? – starsplusplus

0

Nun ist es eine richtige Getter-Methode, die JPA ist standardmäßig davon aus zu einer Einheit Eigenschaft gebunden. Wenn JPA einen Getter nicht als Eigenschaft behandeln soll, wenden Sie die Annotation @Transient auf die Methode an.