Transient keyword vs @Transient annotation

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 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 @Transient. Age field doesnt make sense to be persisted as it must be always calculated based on dateOfBirth field.

Did you find this article valuable?

Support Manish Warang by becoming a sponsor. Any amount is appreciated!