The @GeneratedValue
annotation in JPA/Hibernate tells the persistence provider how to automatically generate values for the primary key field when a new entity is persisted.
It works together with @Id
to specify the strategy for generating unique identifiers.
🔹 What does it provide?
✅ Automates primary key generation → you don’t need to manually set IDs.
✅ Ensures IDs are unique across your entity’s table.
✅ Integrates with different strategies (e.g., database auto-increment, sequences, tables) depending on your database and performance needs.
🔹 Basic usage:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // tells Hibernate to use DB auto-increment
private Long id;
🔹 Main strategies you can specify:
✅ GenerationType.IDENTITY
→ database auto-increment columns.
✅ GenerationType.SEQUENCE
→ database sequence objects.
✅ GenerationType.TABLE
→ special table used for ID generation.
✅ GenerationType.AUTO
→ JPA provider automatically chooses the best strategy.
🔹 Why is it important?
✅ Simplifies entity persistence by removing the need to manually set unique IDs.
✅ Helps avoid bugs from duplicate or conflicting keys.
✅ Allows your application to scale without worrying about key collisions.
🔹 What happens without @GeneratedValue
?
You must manually set the primary key on every new entity → error-prone and impractical in most applications.
✅ Key takeaway:@GeneratedValue
automates the generation of primary keys, ensuring each persisted entity gets a unique ID according to the chosen strategy, making your code simpler, safer, and database-friendly.