import jakarta.persistence.Entity; import jakarta.persistence.Id; @Entity public class User { @Id private Long userId; private String name; }
The @Id annotation marks a field as the primary key, which uniquely identifies each record in the database table. It does not generate values or specify table names.
@GeneratedValue strategy uses the database's identity column to generate primary key values?import jakarta.persistence.Entity; import jakarta.persistence.Id; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; @Entity public class Product { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; }
GenerationType.IDENTITY uses the database's built-in identity column feature to generate unique primary key values automatically.
import jakarta.persistence.Entity; import jakarta.persistence.Id; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; @Entity public class Order { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) private Long orderId; private String product; }
Using GenerationType.SEQUENCE requires a database sequence to exist. If none is defined, saving the entity will fail with a primary key generation error.
id after saving?import jakarta.persistence.Entity; import jakarta.persistence.Id; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; @Entity public class Customer { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String name; public Long getId() { return id; } }
With GenerationType.AUTO, the persistence provider chooses an appropriate strategy to generate a unique primary key value when the entity is saved.
@GeneratedValue strategies in Spring Boot JPA.GenerationType.TABLE uses a special table to generate unique keys and works on all databases, unlike SEQUENCE or IDENTITY which depend on database features.