JPA는 매핑관계의 필수 여부에 따라 실제 데이타베이스로 보내는 SQL 구문이 달라진다.
@Entity
public class Member {
//...
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "teamId")
private Team team;
//...
}
@ManyToOne
의 optional
속성이 true (default) 이거나 @JoinColumn
의 nullable
속성이 true(default) 인 경우에는 Team이 없는 Member도 조회될 것을 보장해야 하기 때문에 Outer Join 을 수행한다.
SELECT *
FROM Member m left outer join Team t
ON m.teamId = t.teamId
@Entity
public class Member {
//...
@ManyToOne(fetch = FetchType.EAGER, optional = false)
@JoinColumn(name = "teamId")
private Team team;
/** 또는
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "teamId", nullable = false)
private Team team;
*/
//...
}
@ManyToOne
의 optional
속성 또는 @JoinColumn
의 nullable
속성이 false 인 경우라면, Team이 없는 Member는 없다는 제약조건이 생기므로 Inner Join을 수행할 수 있다. 따라서 Inner Join을 수행한다.
SELECT *
FROM Member m join Team t
ON m.teamId = t.teamId