Java >> Java tutorial >  >> Tag >> transient

Hvorfor har JPA en @Transient annotation?

Javas transient nøgleord bruges til at angive, at et felt ikke skal serialiseres, hvorimod JPA's @Transient annotation bruges til at angive, at et felt ikke skal bestå i databasen, dvs. deres semantik er forskellig.


Fordi de har forskellige betydninger. @Transient annotation fortæller JPA-udbyderen om ikke at fortsætte nogen (ikke-transient ) attribut. Den anden fortæller serialiseringsrammen ikke at serialisere en attribut. Du vil måske have en @Transient ejendom og stadig serialisere den.


Som andre har sagt, @Transient bruges til at markere felter, som ikke bør bevares. Overvej dette korte eksempel:

public enum Gender { MALE, FEMALE, UNKNOWN }

@Entity
public Person {
    private Gender g;
    private long id;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    public long getId() { return id; }
    public void setId(long id) { this.id = id; }

    public Gender getGender() { return g; }    
    public void setGender(Gender g) { this.g = g; }

    @Transient
    public boolean isMale() {
        return Gender.MALE.equals(g);
    }

    @Transient
    public boolean isFemale() {
        return Gender.FEMALE.equals(g);
    }
}

Når denne klasse sendes til JPA, bevarer den gender og id men forsøger ikke at fortsætte de booleske hjælpemetoder - uden @Transient det underliggende system ville klage over, at enhedsklassen Person mangler setMale() og setFemale() metoder og ville derfor ikke bestå Person overhovedet.


Java tag