Reputation: 37
I am currently working on a spring boot app using Spring Data JPA and Hibernate. My current setup looks like:
My TeamMapping Repository:
public interface TeamMembershipMapping Repository extends JpaRepository<TeamMembershipMapping, Integer>
{
public List<TeamMembershipMapping> getByMemberId(Integer memberId, Pageable pageable);
}
My TeamMembershipMapping Entity:
@Entity
@Table(name = "teamMembership")
public class TeamMembershipMapping
{
@Id
private Integer teamMembershipId;
@Column(table = "teamMembership", name = "memberId")
private Integer memberId;
@Enumerated
@Column
private TeamMembershipStatus status;
@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "teamId")
private Team team;
---Getters and Setters---
}
And my Team Entity:
@Entity
@Table(name = "team")
@SecondaryTable(name = "summaryTeam")
public class Team
{
@Id
private Integer teamId;
@Column
private String name;
@Column
private String description;
@Column(table = "summaryTeam")
private Integer wins;
@Column(table = "summaryTeam", nullable = true)
private Integer losses;
--Getters and Setters---
}
Now my issue is that when I call getByMemberId to retrieve all the TeamMembershipMappings that a particular member has, Hibernate is generating an sql select to get all the TeamMappings, then doing an sql select for each of those Mappings to get the Team information. So if the member is part of 4 teams, thats 1+4 sql selects when it could be done all in one join.
So how do I force Hibernate to scoop up all the information in one big join select?
Upvotes: 1
Views: 1640
Reputation: 1777
In the entity TeamMembershipMapping
, you can create a namedQuery like this :
select tmm.team from TeamMembershipMapping tmm where tmm.memberId = :memberId;
It is just a simple query.
Upvotes: 2