본 내용은 유튜브 나무소리님의 강의 내용을 정리한 내용입니다.
JPA 4-1강 관계 매핑 기본(1)
연관 관계의 이해
- JPA에서 연관관계는 영속객체(Entity)간의 관계를 의미 합니다.
- 영속객체 간의 연관관계는 방향성(direction)을 가지며 단방향, 양방향 그 특성에 따라 구분합니다.
- 연관관계는 관계의 다중성(multiplicity)에 따라 일대일(1 : 1), 일대다(1 : N), 다대다(N : M)관계로 구분합니다.
- 영속객체가 테이블과 매핑되는 것과 마찬가지로 영속객체간의 관계는 테이블간의 관계와 매핑됩니다.
- 영속객체간 관계 그리고 테이블간 관계에는 차이가 있으며 이를 이해하고 매핑을 구성하는 것이 중요합니다.
* 테이블의 관계에 따라 매핑
// Student Class
package com.example.jpa.entity;
...
@Data
@NoArgsConstructor
@Entity
@Table(name = "STUDENT_TB")
public class Student {
@Id
@GeneratedValue
private Long studentId;
private String name;
private String grade;
private String majorId; // Major의 기본키
public Student(String name, String grade) {
this.name = name;
this.grade = grade;
}
}
// Major Class
package com.example.jpa.entity;
...
@Data
@NoArgsConstructor
@Entity
@Table(name = "MAJOR_TB")
public class Major {
@Id
@GeneratedValue
private Long majorId;
private String name;
private String category;
public Major(String name, String category) {
this.name = name;
this.category = category;
}
}
...
transaction.begin();
try {
Major major = new Major("Computer Science", "College of Engineering");
entityManager.persist(major);
Student student = new Student("Kim", "3");
student.setMajorId(major.getMajorId());
entityManager.persist(student);
entityManager.flush();
entityManager.clear();
// Student 검색
Student foundStudent = entityManager.find(Student.class, 1);
System.out.println(foundStudent);
// Student의 Major 검색
Major foundMajor = entityManager.find(Major.class, foundStudent.getMajorId());
System.out.println(foundMajor);
transaction.commit();
}
...
- 위의 코드 처럼 테이블 관계에 따라 엔티티를 매핑하여도 학생정보(Student)와 해당 학생의 전공정보(Major)를 가져올 수 있습니다.
- 하지만 객체 지향 관점에서 본다면 student.getMajor()로 해당 학생의 정보를 가져올 수 있는 것이 맞습니다.
- 그래서 Student 클래스에 필드로 majorId가 아닌 major를 참조하는 것으로 변경을 해주어야합니다.
'JPA' 카테고리의 다른 글
JPA 기초 - @Embeddable (0) | 2024.01.17 |
---|---|
JPA 기초 - 연관관계의 방향성(ManyToOne, JoinColumn) (0) | 2024.01.16 |
JPA 기초 - 필드와 컬럼 매핑(@Temporal, @Lob, @Enumerated, @Translent) (0) | 2024.01.15 |
JPA 기초 - 기본키 매핑(Table), 필드와 컬럼 매핑(@Column) (0) | 2024.01.15 |
JPA 기초 - 기본키 생성 전략(Sequence) (0) | 2024.01.14 |