JPA : 연관관계 매핑

zyan·2021년 8월 19일
0

JPA

목록 보기
3/6
post-custom-banner

1:1(OneToOne)매핑1:N(OneToMany)에 대해 알아보자

1:1 (OneToOne)

1:1관계는 양쪽이 서로 하나의 관계를 가지는 경우이다. FK가 어느 테이블에 있든, 양방향 조회가 가능하다.

@Entity
@SequenceGenerator(name="member_seq_gen", sequenceName="member_seq_id"
		   , initialValue=1, allocationSize=50)

public class Member {
	@Id
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="member_seq_gen")
	@Column(name="member_id")
	private Long memberId;

	@Column(length=20)
	private String name;

	@OneToOne
	@JoinColumn(name="team_id")
	private Team teamId;
}
  • @Entity를 통해 모든 변수를 컬럼으로 만들 수 있다.
  • @Column어노테이션은 생략 가능하나 컬럼명을 지정하고 싶을 때 명시적으로 사용한다. 그 외에, 길이를 지정할 때도 사용한다. (컬럼명은 보통 언더바를 이용한 team_id와 같은 형태를 선호하니, 참고하도록 하자.)
@Entity
@SequenceGenerator(name="team_seq_gen", sequenceName="team_seq_id"
		   , initialValue=1, allocationSize=50)

public class Team {
	@Id
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="team_seq_gen")
	@Column(name="team_id")
	private Long teamId;

	@Column(length=20, name="team_name")
	private String teamName;
}

1:N (OneToMany)

@OneToMany을 선언한 쪽에서 mappedBy속성을 지정해주어야 한다.

@Entity
@SequenceGenerator(name="member_seq_gen", sequenceName="member_seq_id"
		   , initialValue=1, allocationSize=50)
public class Member {
	@Id
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="member_seq_gen")
	@Column(name="member_id")
	private Long memberId;

	@Column(length=20)
	private String name;

	@ManyToOne
	@JoinColumn(name="team_id")
	private Team teamId;
}
  • @JoinColumn(name = "team_id)

    FK를 매핑할 때 사용하는 어노테이션으로, name 속성에는 매핑할 FK이름을 지정한다.

    해당 어노테이션을 생략할 경우 아래와 같은 전략에 따라 외래 키를 매핑한다

    필드명 + "_" + 참조하는 테이블의 @Id 컬럼명

@Entity
@SequenceGenerator(name="team_seq_gen", sequenceName="team_seq_id"
		   , initialValue=1, allocationSize=50)
public class Team {
	@Id
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="team_seq_gen")
	@Column(name="team_id")
	private Long teamId;

	@Column(length=20, name="team_name")
	private String teamName;

	@OneToMany(mappedBy="teamId")
	private List<Member> members = new ArrayList<>();
}
post-custom-banner

0개의 댓글