This Spring Boot repository method uses join fetch to load a ParentEntity and its ChildEntity set in one query. This avoids multiple database calls when accessing children.
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.springframework.stereotype.Repository;
@Repository
public class ParentRepository {
@PersistenceContext
private EntityManager em;
public ParentEntity findByIdWithChildren(Long id) {
return em.createQuery(
"SELECT p FROM ParentEntity p JOIN FETCH p.childEntities WHERE p.id = :id", ParentEntity.class)
.setParameter("id", id)
.getSingleResult();
}
}
// Entities
import jakarta.persistence.*;
import java.util.Set;
@Entity
public class ParentEntity {
@Id
private Long id;
private String name;
@OneToMany(mappedBy = "parent", fetch = FetchType.LAZY)
private Set<ChildEntity> childEntities;
// getters and setters
}
@Entity
public class ChildEntity {
@Id
private Long id;
private String value;
@ManyToOne
@JoinColumn(name = "parent_id")
private ParentEntity parent;
// getters and setters
}