transient is a JAVA keyword (deals with serialization) whereas @Transient is a JPA annotation (deals with persistence).
We as software developers often tend to mix these topics, however these are two distinct features which can be leveraged as per business / technical requirements
Persistence refers to the characteristic of state that outlives the process that created it. Serialization in Java refers to the process of encoding/decoding an object's state as a byte stream.
transient keyword provides the required control over serialization process and offers the flexibility to exclude fields when the object is converted to a byte stream. Howvever JPA considers such transient fields as ones having @Transient annotation, hence the field will not be be persisted by JPA as well.
Fields annotated
@Transient annotation finds its use in modern world of distrubted applications where a field might be of utmost importance for distributed components but at the same time have no business value from persistence per se.
In the above example we have annotated age field as@Transient. Age field doesnt make sense to be persisted as it must be always calculated based on dateOfBirth field.
We as software developers often tend to mix these topics, however these are two distinct features which can be leveraged as per business / technical requirements
Persistence refers to the characteristic of state that outlives the process that created it. Serialization in Java refers to the process of encoding/decoding an object's state as a byte stream.
transient keyword provides the required control over serialization process and offers the flexibility to exclude fields when the object is converted to a byte stream. Howvever JPA considers such transient fields as ones having @Transient annotation, hence the field will not be be persisted by JPA as well.
Fields annotated
@Transient
are converted to a byte stream when the object is serialized, However it will not be persisted by JPA.@Transient annotation finds its use in modern world of distrubted applications where a field might be of utmost importance for distributed components but at the same time have no business value from persistence per se.
1 2 3 4 5 6 7 8 9 10 11 12 | @Entity public class User implements Serializable { private static final long serialVersionUID = 1L; String firstName; String lastName; Date dateOfBirth; @Transient int age; } |
In the above example we have annotated age field as
No comments:
Post a Comment