자바 ORM 표준 JPA 프로그래밍 : 교보문고
자바 ORM 표준 JPA 프로그래밍 - 기본편 : 인프런
블로그 참조!
문제를 해결하기 위해서 JPA 에서 제공하는 기능을 사용해 보자
ER 다이어그램을 보면 알 수 있듯이 Member 테이블에서 Team 의 PK 를
FK 필드로 가지고 있다.
Team 은 여러명의 Member 를 가질 수 있다.
관계 차수를 보면
Team : Member = 1 : N 이다.
관계 차수를 사용하여 다음과 같이 작성해보자
@Entity
public class Member
{
@Id
@GeneratedValue
private Long id;
@Column(name = "USER_NAME")
private String userName;
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;
객체 참조를 위해
연관관계 차수를 살펴보면
Member 가 복수임으로
ManyToOne 을 선언한다.
@JoinColumn
을 사용하여 대상 Entity 와
Mapping 할 외래키의 이름을 지정한다.
@Entity
public class Team
{
@Id
@GeneratedValue
@Column(name = "TEAM_ID")
private Long id;
private String teamName;
try
{
Team team = new Team();
team.setTeamName("A TEAM");
em.persist(team);
Member member = new Member3();
member.setUserName("member1");
member.setTeam(team);
em.persist(member);
// DB 에 저장하고 나서 DB 에서 조회하는 것을 보기위해
em.flush();
em.clear();
Member findMember = em.find(Member3.class, member.getId());
Team findTeam = findMember.getTeam();
System.out.println("findTeam.getTeamName() : "+findTeam.getTeamName());
et.commit();
}
객체 필드를 참조를 사용했기 때문에 Application 에서는
그래프탐색이 이루어지는 것을 볼 수 있다.
해당 메소드를 실행해보자.
그래프 탐색에 대한 예외도 없으며 조회 시 JOIN
쿼리를 생성하는 것을 볼 수 있다.
JPA 에서 연관관계 Mapping 을 어떻게 사용하는지 간략하게 알아봤다.
하지만 일반 Table 에서는 FK JOIN 를 사용하여 양방향으로 조회가 가능했다.
이것을 구현하려면 어떻게 해야할까?