김영환님의 강의 자바 ORM 표준 JPA 프로그래밍 - 기본편 보면서 공부한 내용입니다.
📝 기본 키 매핑 어노테이션
💡@GeneratedValue 종류
- IDENTITY : 데이터베이스에 위임, MYSQL
- ex) MYSQL의 AUTO_INCREMENT- SEQUENCE : 데이터베이스 시퀀스 오브젝트 사용, ORACLE
- @SequenceGenerator 필요- TABLE : 키 생성용 테이블 사용, 모든 DB에서 사용
- @TableGenerator 필요- AUTO : 방언에 따라 자동 지정, 기본값
- ex) 오라클이면 sequence 생성
📝 IDENTITY 전략 특징
📝 테이블 전략 특징
장점 : 모든 데이터베이스에 적용 가능
단점 : 성능
📝 SEQUENCE 전략 특징
📝 권장하는 식별자 전략
💡 연관관계 매핑 기초
- 객체를 테이블에 맞추어 데이터 중심으로 모델링하면, 협력 관계를 만들 수 없다.
- 테이블은 외래 키로 조인을 사용해서 연관된 테이블을 찾는다.
- 객체는 참조를 사용해서 연관된 객체를 찾는다.
// 객체 지향 연관관계 사용 전
// Member.java
@Id
@GeneratedValue
@Column(name="MEMBER_ID")
private Long id;
@Column(name="USERNAME")
private String username;
@Column(name="TEAM_ID")
private Long teamId;
// Team.java
@Id @GeneratedValue
@Column(name="TEAM_ID")
private Long id;
private String name;
// Main.class
Team team = new Team();
team.setName("TeamA");
em.persist(team);
Member member = new Member();
member.setUsername("member1");
member.setTeam(team);
em.persist(member);
Member findMember = em.find(Member.class, member.getId());
Long findMemberId = findMember.getTeamId();
Team findTeam = findMemberId.getName();
// 객체 지향 연관관계 사용 후
// Member.java
@Id
@GeneratedValue
@Column(name="MEMBER_ID")
private Long id;
@Column(name="USERNAME")
private String username;
@ManyToOne // 단방향 매핑 (Team이 1. 회원이 many)
@JoinColumn(name="TEAM_ID")
private Team team;
// Main.class
Team team = new Team();
team.setName("TeamA");
em.persist(team);
Member member = new Member();
member.setUsername("member1");
member.setTeam(team);
em.persist(member);
Member findMember = em.find(Member.class, member.getId());
Team findTeam = findMember.getTeam();
📝 양방향 매핑
// Team.java
@Id @GeneratedValue
@Column(name="TEAM_ID")
private Long id;
private String name;
@OneToMany(mappedBy = "team")
// 팀(1)에서 회원(many)로
// Member.java에 있는 Team team에 엮여있다
private List<Member> members = new ArrayList<Member>();
📝 연관관계의 주인
📝 양방향 연관관계시 주의사항
public void setTeam(Team team) {
this.team = team;
team.getMembers().add(this); // this는 Member
}
💡 연관관계 매핑시 고려사항 3가지
1. 다중성
✅ 다대일 : @ManyToOne
✅ 일대다 : @OneToMany
✅ 일대일 : @OneToOne
✅ 다대다 : @ManyToMany
2. 단방향, 양방향
3. 연관관계의 주인
Member | Team |
---|---|
![]() | ![]() |