한 회원은 하나의 팀에 속하며, 한 팀에는 여러 회원이 속하는 경우를 생각해보자. 팀은 회원에 대한 정보를 몰라도 괜찮다고 하면 아래와 같이 표현할 수 있다.
JPA Entity
Member.java
public class Memeber {
name = "memberId")
( private Long id;
private String userName;
name = "teamId")
( private Team team
//bla bla
}
@JoinColumn
을 사용하여 Team과 다대일 관계를 매핑한다.
@JoinColumn 주요 속성
name
- 속성은 외래키 컬럼의 이름을 지정한다. 기본 값은필드명_참조하는 테이블의 PK
로 정해진다.
referencedColumnName
- 외래 키가 참조하는 테이블의 컬럼명
Team.java
public class Team {
name = "teamId")
( private Long id;
private String teamName;
//bla bla
}
팀에서는 회원에 대한 정보를 몰라도 되기 때문에 매핑을 하지 않았다.
만약 팀에서도 회원에 대한 정보가 필요하여 양방향 매핑이 필요하다면 다음과 같이 하면 된다.
Team.java
public class Team {
name = "teamId")
( private Long id;
private String teamName;
mappedBy="team")
( private List<Member> members;
//bla bla
}
Team 기준으로 볼때 다대일의 반대인 일대다 관계가 되므로 @OneToMany
를 사용하여 Member 와의 관계 매핑을 한다.
@OneToMany 주요 속성
mappedBy
- 양방향 매핑 시 반대쪽 매핑 필드의 이름을 값으로 지정해야한다. 이 경우에는 반대쪽 매핑핑이Member.team
이기 때문에 "team"을 값으로 넣었다.
'Development > DB, JPA' 카테고리의 다른 글
스프링 JPA 그리고 LazyInitializeException (0) | 2017.03.23 |
---|---|
NULL 제약 조건과 조인 전략 (0) | 2017.03.21 |
JPA 기본 키 전략 (0) | 2017.03.12 |
JPA를 이용한 엔티티 CUD(등록,수정,삭제) (0) | 2017.03.12 |
EntityManager 와 EntityManagerFactory (0) | 2017.03.12 |