What does @Transient annotation mean for methods?

starsplusplus picture starsplusplus · Jan 31, 2014 · Viewed 19.3k times · Source

So I have learned that the transient keyword in Java means that an entity does not persist, and that the @Transient annotation in JPA means don't persist a field to the database. But what does it mean when @Transient is applied to a method rather than a variable?

This is where I found it in our code:

@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;
}

Answer

axtavt picture axtavt · Jan 31, 2014

All field-level JPA annotations can be placed either on fields or on properties, it determines access type of the entity (i.e. how JPA provider will access fields of that entity - directly or using getters/setters).

Default access type is determined by placement of @Id annotation, and it should be consistent for all fields of the entity (or hiererchy of inherited entities), unless explicitly overriden by @Access for some fields.

So, @Transient on getters has the same meaning as @Transient on fields - if default access type for your entity is property access, you need to annotate all getters that don't correspond to persistent properties with @Transient.