Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 제태크
- XLF
- StringBuffer
- 주식
- 백준
- 프로그래머스
- 현금흐름표
- FCF
- S&P500
- 알고리즘
- 인플레이션
- 미국주식
- 객체지향
- 금리인하
- object
- javascript
- 주린이
- 금리인상
- mco
- 배당성장
- etf
- 무디스
- Java
- 자바
- 접근제어자
- 잉여현금흐름
- 다형성
- 기업분석
- 오버라이딩
- 그리디 알고리즘
Archives
- Today
- Total
오늘의하루
JPA 연관 관계 매핑 - start 본문
JPA에서 연관 관계 매핑에 대해 쉬운 이해를 하기 위해서는 객체와 테이블의 연관 관계의 차이를 이해해야한다.
객체를 테이블에 맞추어 그대로 모델링 한다면 객체 간 협력 관계를 만들 수 없게 된다.
테이블은 외래키(FK)로 조인하여 연관 된 테이블을 찾을 수 있지만 객체는 참조를 통해 연관된 객체를 찾을 수 있게 된다.
아래는 Member 테이블과 Team 테이블이 N:1관계일때 Entity를 어떻게 만들어야 하는지에 대해 작성하였다.
- Member 테이블은 Team 테이블의 Id값을 외래키(FK)로 가지고 있다.
// 객체를 테이블에 맞추어 데이터 중심으로 모델링 한 경우
@Entity
public class Team{
@Id
@Column(name = "TEAM_ID")
private Long id;
private String teamName;
}
@Entity
public class Member{
@Id
@Column(name = "MEMBER_ID")
private Long id;
private Long teamId;
private String userName;
}
// 객체 지향 모델링 (단방향)
@Entity
public class Team{
@Id
@Column(name = "TEAM_ID")
private Long id;
private String teamName;
}
@Entity
public class Member{
@Id
@Column(name = "MEMBER_ID")
private Long id;
@ManyToOne
@JoinColumn(name = "TEAM_ID")`
private Team team;
private String userName;
}
//양방향 매핑
@Entity
public class Team{
@Id
@Column(name = "TEAM_ID")
private Long id;
private String teamName;
@OneToMany(mappedBy = "team")
List<Member> members = new ArrayList<>();
}
@Entity
public class Member{
@Id
@Column(name = "MEMBER_ID")
private Long id;
@ManyToOne
@JoinColumn(name = "TEAM_ID")`
private Team team;
private String userName;
}
양방향 연관관계의 주인과 mappedBy
객체의 두 관계 중 하나를 연관관계의 주인으로 지정하는 것이다.
이때 지정된 주인은 등록 및 수정이 가능하지만 주인이 아닌쪽은 읽기만 가능하다.
주인이 아닌 곳에서 mappedBy속성으로 주인을 지정해 줄 수 있다.
그럼 누구를 주인으로 해야할까?
아직 정확한 이유는 알 수 없지만 테이블 구조 상 외래키가 있는 곳을 주인으로 지정하면 여러가지 문제를 해결할 수 있다.
그리고 만약 주인이 아닌 곳에서 아무리 등록 및 수정을 하여도 실제 DB에서는 아무런 일이 생기지는 않는다.
하지만 순수 객체 상태를 고려해서 항상 양쪽에 값을 설정하는것이 좋다.
실무에서 항상 기억해야 하는 점
처음부터 양방향 연관관계를 맺으려고 하지말고 우선 단방향 매핑으로 연관관계를 완성시켜야 한다.
객체가 양방향으로 연결되어 있다는 말은 객체의 입장에서 좋지 못한 소리이기 때문이다.
그러므로 우선 단방향 매핑을 완벽하게 한 후 추후 양방향 연관관계는 필요할 경우 추가해서 사용해도 늦지 않다.
이는 자바 코드 몇줄이면 가능하며 테이블에 아무런 영향을 주지 않기 때문이다.
'Spring > JPA' 카테고리의 다른 글
org.hibernate.loader.MultipleBagFetchException 원인 및 해결 (0) | 2024.02.15 |
---|---|
[JPA] LazyInitializationException 발생! (0) | 2024.02.14 |
JPA 기본키 매핑 (1) | 2024.01.12 |
JPA 엔티티 매핑 (0) | 2024.01.02 |
JPA에서 batch_size를 지정하는 이유는? (0) | 2024.01.02 |
Comments