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
Recall & Review
beginner
What does the @ManyToOne annotation represent in Spring Boot JPA?
It represents a many-to-one relationship between two entities, where many instances of one entity relate to one instance of another entity.
Click to reveal answer
beginner
In a @ManyToOne relationship, which side owns the foreign key in the database?
The entity with the @ManyToOne annotation owns the foreign key column in the database table.
Click to reveal answer
intermediate
How do you specify the foreign key column name in a @ManyToOne relationship?
You use the @JoinColumn annotation with the name attribute to specify the foreign key column name.
Click to reveal answer
intermediate
Can a @ManyToOne relationship be optional? How do you control this?
Yes, it can be optional. You control this by setting the optional attribute in @ManyToOne to true or false.
Click to reveal answer
intermediate
What is the default fetch type for @ManyToOne and why is it important?
The default fetch type is EAGER, meaning the related entity is loaded immediately with the owner entity. This affects performance and loading behavior.
Click to reveal answer
In a @ManyToOne relationship, which entity contains the foreign key column?
ANeither entity contains the foreign key
BThe entity with the @ManyToOne annotation
CBoth entities share the foreign key
DThe entity with the @OneToMany annotation
✗ Incorrect
The entity annotated with @ManyToOne owns the foreign key column in the database.
Which annotation is used to specify the foreign key column name in a @ManyToOne relationship?
A@JoinColumn
B@Column
C@ForeignKey
D@PrimaryKeyJoinColumn
✗ Incorrect
@JoinColumn is used to define the foreign key column name in the owning entity.
What is the default fetch type of a @ManyToOne relationship in Spring Boot JPA?
ANONE
BLAZY
CDEFAULT
DEAGER
✗ Incorrect
The default fetch type for @ManyToOne is EAGER, which loads the related entity immediately.
How do you make a @ManyToOne relationship optional?
ASet optional=true
BUse @Nullable annotation
CSet optional=false
DUse @NotNull annotation
✗ Incorrect
Setting optional=true allows the relationship to be null, making it optional.
If you want to avoid loading the related entity immediately in a @ManyToOne relationship, what should you do?
ASet fetch=FetchType.EAGER
BRemove the @ManyToOne annotation
CSet fetch=FetchType.LAZY
DUse @Transient annotation
✗ Incorrect
Setting fetch=FetchType.LAZY delays loading the related entity until it is accessed.
Explain how the @ManyToOne annotation works in Spring Boot JPA and how it relates to database foreign keys.
Think about how two tables connect with one foreign key column.
You got /4 concepts.
Describe how to control the optionality and fetch behavior of a @ManyToOne relationship.
Consider attributes inside the @ManyToOne annotation.
You got /4 concepts.
Practice
(1/5)
1. What does the @ManyToOne annotation represent in Spring Boot JPA?
easy
A. A many-to-one relationship where many entities link to one entity
B. A one-to-many relationship where one entity links to many entities
C. A one-to-one relationship between two entities
D. A many-to-many relationship between two entities
Solution
Step 1: Understand relationship types in JPA
@ManyToOne means many instances of an entity relate to one instance of another entity.
Step 2: Match the description to the annotation
The annotation @ManyToOne specifically defines many entities pointing to one entity.
Final Answer:
A many-to-one relationship where many entities link to one entity -> Option A
Quick Check:
@ManyToOne = many entities to one entity [OK]
Hint: Remember: Many objects point to one with @ManyToOne [OK]
Common Mistakes:
Confusing @ManyToOne with @OneToMany
Thinking it means one-to-one
Mixing it up with many-to-many
2. Which of the following is the correct way to declare a @ManyToOne relationship with a join column named category_id?
easy
A. @ManyToOne
@JoinColumn(name = "category_id")
private Category category;
B. @OneToMany
@JoinColumn(name = "category_id")
private Category category;
C. @ManyToOne
@JoinColumn(columnName = "category_id")
private Category category;
D. @ManyToOne
@JoinColumn(name = category_id)
private Category category;
Solution
Step 1: Check correct annotation usage
The relationship is many-to-one, so @ManyToOne is correct.
Step 2: Verify @JoinColumn syntax
The attribute to specify column name is name and the value must be a string in quotes.
Final Answer:
@ManyToOne
@JoinColumn(name = "category_id")
private Category category; -> Option A
Quick Check:
@JoinColumn uses name="column_name" [OK]
Hint: Use @JoinColumn(name = "column_name") with quotes [OK]
Common Mistakes:
Using @OneToMany instead of @ManyToOne
Using columnName instead of name in @JoinColumn
Omitting quotes around column name
3. Given the entities below, what will be the output of System.out.println(order.getCustomer().getName()); if the order is linked to a customer named "Alice"?
public class Order {
@ManyToOne
@JoinColumn(name = "customer_id")
private Customer customer;
public Customer getCustomer() { return customer; }
}
public class Customer {
private String name;
public String getName() { return name; }
}
medium
A. Compilation error
B. customer_id
C. null
D. Alice
Solution
Step 1: Understand the relationship and method calls
The order has a customer linked via @ManyToOne, so calling getCustomer() returns the Customer object.
Step 2: Access the customer's name
Calling getName() on the Customer returns the customer's name, which is "Alice".
Final Answer:
Alice -> Option D
Quick Check:
order.getCustomer().getName() = "Alice" [OK]
Hint: Follow the chain: order -> customer -> name [OK]
Common Mistakes:
Expecting the join column name instead of customer name
Assuming null if not initialized
Thinking it causes a compile error
4. Identify the error in the following code snippet that uses @ManyToOne:
@Entity
public class Book {
@Id
private Long id;
@ManyToOne
@JoinColumn(name = "author_id")
private Author author;
public Author getAuthor() { return author; }
public void setAuthor(Author author) { this.author = author; }
}
@Entity
public class Author {
private String name;
public String getName() { return name; }
}
medium
A. Author class is missing @Entity annotation
B. Book class should use @OneToMany instead of @ManyToOne
C. Missing @Id annotation in Author class
D. Join column name should be "authorId" not "author_id"
Solution
Step 1: Check entity requirements
Every JPA entity must have a primary key annotated with @Id. The Author class lacks this.
Step 2: Verify other annotations
Author has @Entity but no @Id, which will cause runtime errors.
Final Answer:
Missing @Id annotation in Author class -> Option C
Quick Check:
Entity requires @Id field [OK]
Hint: Always add @Id to every entity class [OK]
Common Mistakes:
Confusing relationship annotations
Ignoring missing primary key
Assuming join column naming causes error
5. You have two entities: Order and Customer. Each order belongs to one customer, but a customer can have many orders. You want to fetch all orders with their customers efficiently. Which approach correctly uses @ManyToOne for eager loading?
hard
A. Use @ManyToOne(fetch = FetchType.LAZY) on Order's customer and fetch customers separately
B. Use @ManyToOne(fetch = FetchType.EAGER) on Order's customer to load customers with orders
C. Use @OneToMany(fetch = FetchType.EAGER) on Customer's orders and no mapping on Order
D. Use @ManyToOne without fetch type and manually query customers for each order
Solution
Step 1: Understand fetch types in @ManyToOne
By default, @ManyToOne uses FetchType.EAGER, loading the related customer eagerly with the order.
Step 2: Match the best approach
Explicitly using fetch = FetchType.EAGER on the Order's customer field ensures efficient eager loading for this many-to-one relationship.
Final Answer:
Use @ManyToOne(fetch = FetchType.EAGER) on Order's customer to load customers with orders -> Option B
Quick Check:
@ManyToOne = EAGER by default [OK]
Hint: EAGER fetch on @ManyToOne loads related data together [OK]
Common Mistakes:
Using LAZY fetch without proper query optimization
Using @OneToMany on Customer without Order mapping