Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Using @Id and @GeneratedValue for Primary Keys in Spring Boot
📖 Scenario: You are building a simple Spring Boot application to manage a list of books. Each book needs a unique identifier to keep track of it in the database.
🎯 Goal: Create a Book entity class with a primary key field that uses @Id and @GeneratedValue annotations to automatically generate unique IDs for each book.
📋 What You'll Learn
Create a Book class annotated with @Entity
Add a private field id of type Long to serve as the primary key
Annotate the id field with @Id and @GeneratedValue
Use GenerationType.IDENTITY strategy for @GeneratedValue
Add a private field title of type String for the book's title
💡 Why This Matters
🌍 Real World
In real applications, entities need unique IDs to identify records in databases. Using @Id and @GeneratedValue helps automate this process.
💼 Career
Understanding how to define primary keys with auto-generation is essential for backend developers working with Spring Boot and databases.
Progress0 / 4 steps
1
Create the Book entity class with fields
Create a public class called Book annotated with @Entity. Inside it, declare a private Long field named id and a private String field named title.
Spring Boot
Hint
Use @Entity above the class. Declare id and title as private fields inside the class.
2
Add @Id annotation to the id field
Add the @Id annotation above the id field in the Book class to mark it as the primary key.
Spring Boot
Hint
Place @Id directly above the id field.
3
Add @GeneratedValue with IDENTITY strategy
Add the @GeneratedValue annotation above the id field with the strategy set to GenerationType.IDENTITY to let the database generate unique IDs automatically.
Spring Boot
Hint
Use @GeneratedValue(strategy = GenerationType.IDENTITY) above the id field.
4
Add getter and setter methods for id and title
Add public getter and setter methods for both id and title fields in the Book class to allow access and modification.
Spring Boot
Hint
Write simple getter and setter methods for both fields.
Practice
(1/5)
1. What is the main purpose of the @Id annotation in a Spring Boot entity?
easy
A. To specify a foreign key relationship
B. To generate unique values automatically
C. To define a database table name
D. To mark the primary key field of the entity
Solution
Step 1: Understand the role of @Id
The @Id annotation marks a field as the primary key in a database entity.
Step 2: Differentiate from other annotations
@GeneratedValue generates values, but @Id specifically identifies the primary key field.
Final Answer:
To mark the primary key field of the entity -> Option D
Quick Check:
@Id marks primary key [OK]
Hint: Remember: @Id means 'this is the primary key' [OK]
Common Mistakes:
Confusing @Id with @GeneratedValue
Thinking @Id generates values automatically
Using @Id to name tables
2. Which of the following is the correct way to use @GeneratedValue with GenerationType.IDENTITY in a Spring Boot entity?
easy
A. @GeneratedValue(strategy = GenerationType.AUTO)
B. @GeneratedValue(strategy = GenerationType.SEQUENCE)
C. @GeneratedValue(strategy = GenerationType.IDENTITY)
D. @GeneratedValue(strategy = GenerationType.TABLE)
Solution
Step 1: Identify the correct strategy for identity generation
GenerationType.IDENTITY is used to let the database auto-increment the primary key.
Step 2: Match the annotation syntax
The correct syntax is @GeneratedValue(strategy = GenerationType.IDENTITY).
Final Answer:
@GeneratedValue(strategy = GenerationType.IDENTITY) -> Option C
Quick Check:
Use GenerationType.IDENTITY with strategy = GenerationType.IDENTITY [OK]
Hint: Use strategy = GenerationType.IDENTITY for auto-increment keys [OK]
Common Mistakes:
Using AUTO instead of IDENTITY for auto-increment
Omitting the strategy parameter
Confusing SEQUENCE with IDENTITY
3. Given the entity code below, what will be the value of user.getId() after saving a new user to the database?
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// getters and setters
}
medium
A. A unique auto-generated Long value
B. null
C. The name of the user
D. An exception will be thrown
Solution
Step 1: Understand @GeneratedValue with IDENTITY
This strategy lets the database generate a unique primary key value automatically when saving.
Step 2: Predict the value after saving
After saving, user.getId() will hold the generated unique Long value assigned by the database.
Final Answer:
A unique auto-generated Long value -> Option A
Quick Check:
@GeneratedValue with IDENTITY creates unique IDs [OK]
Hint: After save, IDENTITY generates a unique Long ID automatically [OK]
Common Mistakes:
Expecting id to be null after save
Confusing id with other fields
Assuming an error occurs without database setup
4. Consider this entity code snippet:
@Entity
public class Product {
@Id
@GeneratedValue
private Long productId;
private String name;
}
What is the likely problem with this code?
medium
A. Missing strategy in @GeneratedValue may cause unexpected ID generation
B. The field productId should not be private
C. The @Id annotation is missing
D. The entity class must implement Serializable
Solution
Step 1: Check @GeneratedValue usage
The @GeneratedValue annotation without specifying a strategy defaults to AUTO, which may behave differently depending on the database.
Step 2: Understand impact of missing strategy
This can cause unexpected ID generation behavior if the database does not support the default strategy well.
Final Answer:
Missing strategy in @GeneratedValue may cause unexpected ID generation -> Option A
Quick Check:
Always specify strategy to avoid surprises [OK]
Hint: Always specify strategy in @GeneratedValue to avoid surprises [OK]
Common Mistakes:
Thinking private fields cause errors
Believing @Id is missing
Assuming Serializable is mandatory
5. You want to create a Spring Boot entity with a primary key that uses a database sequence named user_seq. Which is the correct way to annotate the ID field?
hard
A. @Id @GeneratedValue(strategy = GenerationType.IDENTITY)