Notice
Recent Posts
Recent Comments
Link
250x250
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- JavaScript
- web
- 프런트엔드
- spring
- jsp
- SQL
- 자바스크립트
- Next.js
- 서버
- 프론트엔드
- jpa
- 데이터베이스
- oracle
- 미니정리
- 디자인 패턴
- 오라클
- 스프링
- 스프링부트
- 정리
- 쿼리
- 코드 테스트
- BACK-END
- java
- node.js
- MySQL
- 코드테스트
- 프로그래머스
- 알고리즘
- 백엔드
- 자바
Archives
- Today
- Total
참치코더의 꿈 메모장
JPA / 단방향 엔티티 연관관계(多 : 一) 정리 본문
728x90

JPA에서 단방향 연관관계는 엔티티 A -> B 방향으로만 참조가 존재하고, B -> A 방향은 없는 구조를 말한다.
단방향 연관관계
- Member가 Team을 참조하지만, Team은 Member를 모르는 경우가 단방향 연관관계이다.
Member -> Team : O (참조 존재)
Team -> Member : X (참조 없음)
|
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
// Team
@Entity
@Getter
@Setter
public class Team {
@Id
@GeneratedValue
@Column(name = "TEAM_ID") private Long id;
private String name;
}
// Member
@Entity
@Getter
@setter
public class Member {
@Id
@GeneratedValue
private Long id;
private String username;
// 단방향 연관관계 : Member -> Team (다대일)
@ManyToOne
@JoinColumn(name = "TEAM_ID") // 참조하는 외래키 이름
private Team team;
}
// 실행코드
public class JpaMain {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
// 팀A 생성
Team teamA = new Team();
teamA.setName("팀A");
em.persist(teamA);
// 회원 생성
Member member = new Member();
member.setUsername("회원1");
member.setTeam(teamA); // 단방향 관계 설정 (연관관계 주인)
em.persist(member);
em.flush();
em.clear();
// 조회
Member findMember = em.find(Member.class, member.getId());
Team team = findMember.getTeam(); // 객체 그래프 탐색
System.out.println("팀이름 : " + team.getName());
// 수정
// 팀B 생성
Team teamB = new Team();
teamB.setName("팀B");
em.persist(teamB);
// 회원1 팀 변경
findMember.setTeam(teamB);
// 연관관계 제거
findMember.setTeam(null);
// 팀 삭제 전 flush (외래키 null 보장)
em.flush();
em.remove(teamA);
em.remove(teamB);
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
} finally {
em.close();
}
emf.close();
}
}
|
cs |
- 항상 다대일 관계에서 다쪽을 연관관계 주인으로 권한을 줘야 한다.
- 양방향 엔티티 관계에서 다쪽을 연관관계 주인으로 줘야 복잡하지 않은 쿼리를 짤 수 있고, 개발하는데 편하다.
728x90
'JPA' 카테고리의 다른 글
| JPA / 일대다(oneToMany) 관계 매핑 정리 (0) | 2025.10.09 |
|---|---|
| JPA - 양방향 매핑 과 설정 방법 정리 (0) | 2025.10.08 |
| JPA / 데이터 생성 시간 , 수정 시간 컬럼 자동 저장 방법(코드 위주) (0) | 2025.10.04 |
| JPA / IDENTITY 전략 VS SEQUENCE 전략 비교 정리 (0) | 2025.10.02 |
| JPA / Entitymanager와 영속성 컨텍스트 관계 정리 (0) | 2025.10.01 |
Comments