0
0
Spring Bootframework~20 mins

Why relationships matter in JPA in Spring Boot - Challenge Your Understanding

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
JPA Relationship Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
component_behavior
intermediate
2:00remaining
What happens when you fetch a OneToMany relationship lazily in JPA?

Consider a JPA entity Author with a @OneToMany relationship to Book marked as fetch = FetchType.LAZY. What will happen when you access the books collection outside a transaction?

Spring Boot
public class Author {
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "author")
    private List<Book> books;

    // getters and setters
}

// In a service method without transaction
Author author = authorRepository.findById(1L).orElseThrow();
List<Book> books = author.getBooks(); // What happens here?
AThe code compiles but returns an empty list always.
BA LazyInitializationException is thrown because the collection is accessed outside the transaction.
CThe books collection is null because it was not fetched eagerly.
DThe books collection is fully loaded automatically without any error.
Attempts:
2 left
💡 Hint

Think about how lazy loading works and when the database session is active.

📝 Syntax
intermediate
2:00remaining
Which annotation correctly defines a bidirectional ManyToOne/OneToMany relationship in JPA?

Given two entities Order and OrderItem, which option correctly sets up a bidirectional relationship where one order has many order items?

Spring Boot
public class Order {
    // relationship here
}

public class OrderItem {
    // relationship here
}
A
@ManyToOne(mappedBy = "items") private Order order; // in Order
@OneToMany @JoinColumn(name = "order_id") private List&lt;OrderItem&gt; items; // in OrderItem
B
@OneToMany private List&lt;OrderItem&gt; items; // in Order
@ManyToOne(mappedBy = "order") private Order order; // in OrderItem
C
@OneToMany(mappedBy = "order") private List&lt;OrderItem&gt; items; // in Order
@ManyToOne @JoinColumn(name = "order_id") private Order order; // in OrderItem
D
@ManyToOne private Order order; // in Order
@OneToMany(mappedBy = "order") private List&lt;OrderItem&gt; items; // in OrderItem
Attempts:
2 left
💡 Hint

Remember that mappedBy goes on the inverse side and @JoinColumn on the owning side.

state_output
advanced
2:00remaining
What is the state of entities after cascading a persist in a OneToMany relationship?

Given an Author entity with a @OneToMany(cascade = CascadeType.PERSIST) relationship to Book, what happens when you persist the author with new books added?

Spring Boot
Author author = new Author();
author.setName("Jane Doe");
Book book1 = new Book();
book1.setTitle("Book One");
Book book2 = new Book();
book2.setTitle("Book Two");
author.setBooks(List.of(book1, book2));
entityManager.persist(author);
// What is the state of book1 and book2 after this?
ABoth book1 and book2 are also persisted automatically due to cascade persist.
BOnly author is persisted; book1 and book2 remain transient and not saved.
CBooks are persisted but without their relationship to author set.
DPersisting author throws an exception because books are not explicitly persisted.
Attempts:
2 left
💡 Hint

Think about what cascade persist means for related entities.

🔧 Debug
advanced
2:00remaining
Why does this bidirectional relationship cause infinite recursion in JSON serialization?

Given these entities with bidirectional relationships, serializing Author to JSON causes infinite recursion. Why?

Spring Boot
public class Author {
    @OneToMany(mappedBy = "author")
    private List<Book> books;
    // getters and setters
}

public class Book {
    @ManyToOne
    private Author author;
    // getters and setters
}

// Serialization code:
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(author);
ABecause the Book entity lacks a primary key, causing serialization to fail.
BBecause the @OneToMany annotation is missing fetch type, causing serialization failure.
CBecause the ObjectMapper is not configured to handle collections, causing an error.
DBecause Author references Book and Book references Author, causing infinite back-and-forth serialization.
Attempts:
2 left
💡 Hint

Think about how JSON serialization handles circular references.

🧠 Conceptual
expert
2:00remaining
Why is it important to define owning and inverse sides in JPA relationships?

In JPA, relationships have owning and inverse sides. Why does this distinction matter?

ABecause only the owning side controls the database foreign key updates, preventing inconsistent data.
BBecause the inverse side is the only one that can cascade operations to related entities.
CBecause the owning side is ignored during persistence, and only the inverse side is saved.
DBecause both sides independently update the database, causing duplicate foreign keys.
Attempts:
2 left
💡 Hint

Consider which side JPA uses to manage the foreign key column in the database.