0
0
Spring Bootframework~20 mins

Specification pattern for dynamic queries in Spring Boot - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Specification Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
component_behavior
intermediate
2:00remaining
How does Specification combine multiple conditions?
Given two Specification objects combined with and(), what is the resulting behavior when querying the database?
Spring Boot
Specification<User> spec1 = (root, query, cb) -> cb.equal(root.get("status"), "ACTIVE");
Specification<User> spec2 = (root, query, cb) -> cb.greaterThan(root.get("age"), 18);
Specification<User> combined = spec1.and(spec2);
List<User> results = userRepository.findAll(combined);
AReturns users who are either ACTIVE or older than 18.
BReturns users who are ACTIVE but ignores age condition.
CReturns users older than 18 but ignores status condition.
DReturns users who are ACTIVE and older than 18.
Attempts:
2 left
💡 Hint
Think about how the and() method combines conditions logically.
📝 Syntax
intermediate
2:00remaining
Identify the syntax error in this Specification
Which option contains a syntax error in the Specification lambda expression?
Spring Boot
Specification<Product> spec = (root, query, cb) -> cb.like(root.get("name"), "%phone%");
A;)"%enohp%" ,)"eman"(teg.toor(ekil.bc >- )bc ,yreuq ,toor( = ceps >tcudorP<noitacificepS
BSpecification<Product> spec = (root, query, cb) -> cb.like(root.get("name"), "%phone%");
CSpecification<Product> spec = (root, query, cb) -> cb.like(root.get("name"), "%phone%")
Dpecification<Product> spec = (root, query, cb) -> cb.like(root.get("name"), "%phone%");
Attempts:
2 left
💡 Hint
Check for missing or misplaced characters in the lambda expression.
🔧 Debug
advanced
2:00remaining
Why does this Specification cause a runtime error?
Consider this Specification code snippet. What causes the runtime error?
Spring Boot
Specification<Order> spec = (root, query, cb) -> cb.equal(root.get("nonExistentField"), "value");
List<Order> orders = orderRepository.findAll(spec);
AThe field 'nonExistentField' does not exist in the Order entity, causing a runtime exception.
BThe Specification lambda is missing a return statement.
CThe query parameter is null, causing a NullPointerException.
DThe CriteriaBuilder 'cb' is not initialized properly.
Attempts:
2 left
💡 Hint
Check if the field used in the query matches the entity's fields.
state_output
advanced
2:00remaining
What is the result count of this dynamic Specification query?
Given this Specification that filters users by optional parameters, what is the count of users returned if both parameters are null?
Spring Boot
Specification<User> spec = Specification.where(null);
if (name != null) {
  spec = spec.and((root, query, cb) -> cb.like(root.get("name"), "%" + name + "%"));
}
if (email != null) {
  spec = spec.and((root, query, cb) -> cb.equal(root.get("email"), email));
}
List<User> users = userRepository.findAll(spec);
AReturns users filtered by default criteria.
BThrows NullPointerException due to null Specification.
CReturns all users without filtering.
DReturns no users because Specification is null.
Attempts:
2 left
💡 Hint
Think about what happens when Specification.where(null) is used with no further conditions.
🧠 Conceptual
expert
2:00remaining
Why use Specification pattern for dynamic queries in Spring Data JPA?
Which is the best explanation for using the Specification pattern for dynamic queries?
AIt allows building complex queries by combining reusable predicates dynamically at runtime.
BIt automatically caches all queries to improve performance without extra code.
CIt replaces the need for any JPQL or SQL queries in the application.
DIt forces all queries to be static and predefined at compile time.
Attempts:
2 left
💡 Hint
Consider how dynamic conditions can be combined in a flexible way.